近期用bootstrap 做前端的上传,功能涉及到上传时就是召网上的教程随便弄一搜一大把,但是做到修改页面时候不知道页面该如何回显,折腾了一阵子才完成遂记录下来希望能给看到的小伙伴有点启发吧。

首先是上传的功能

上传要求支持图片和各种其他种类的文件,效果基本 如下了,点击上传,依次就是调后台接口把文件送上,返回一个文件的路径,可以直接请求的服务器地址。

html代码如下:基本的框子吧。

<div class="file-loading">
<input id="fileinput-demo-0" name="file" type="file" multiple>
</div>

配套的js:

var taskFiles=[];
$(document).ready(function () {
//上传文件
$("#fileinput-demo-1").fileinput({
language: 'zh', //设置语言
uploadUrl:ctx + "api/common/upload", //上传的地址
// allowedFileExtensions: ['jpg', 'gif', 'png'],//接收的文件后缀
// uploadExtraData:{"id": 1, "fileName":'123.mp3'},
uploadAsync: true, //默认异步上传
showUpload:true, //是否显示上传按钮
showRemove :false, //显示移除按钮
showPreview :true, //是否显示预览
showCaption:false,//是否显示标题
browseClass:"btn btn-primary", //按钮样式    
dropZoneEnabled: false,//是否显示拖拽区域
// minImageWidth: 50, //图片的最小宽度
// minImageHeight: 50,//图片的最小高度
// maxImageWidth: 1000,//图片的最大宽度
// maxImageHeight: 1000,//图片的最大高度
//maxFileSize:0,//单位为kb,如果为0表示不限制文件大小
//minFileCount: 0,
maxFileCount:10, //表示允许同时上传的最大文件个数
enctype:'multipart/form-data',
validateInitialCount:true
// previewSettings: {//图片显示
// image: {width: "80px", height: "60px"},
// }
// previewFileIcon: "<iclass='glyphicon glyphicon-king'></i>",
// msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
}).on("fileuploaded", function (event, data, previewId, index){
       // 这里上传会自动调用上面配置的上传地址,声场的previewId就是图片的元素id,
// $('#' + previewId).attr('fileid', data.response.fileName);
var file={
previewId:previewId,
fileName:data.response.fileName
};
taskFiles.push(file);//将每一个上传成功的文件放到初始的一个数组里,
console.log(taskFiles);
}).on('filesuccessremove', function (event, previewId, extra) {
//在移除事件里取出所需数据,并执行相应的删除指令,从数组内删除,可以调服务器接口做服务端删除。
console.log(previewId)
for(var i=0;i<taskFiles.length;i++){
if(taskFiles[i].previewId==previewId){
taskFiles.splice(i,1);
}
}
console.log(taskFiles);
});

我们上传三个文件,对用控制台打印出三个文件信息,

下面看一下修改页面的回显操作,html 增加了一个 隐藏的元素可以不考虑我的代码里有这里不是必须的。

<div class="form-group">
<label class="col-sm-3 control-label">任务文件:</label>
<div class="col-sm-8">
<div class="file-loading">
<input id="fileinput-demo-1" name="file" type="file" multiple> </div>
</div>
</div>
<input type="hidden" name="filePaths" id="carousel_imgs_hidden"/>

js如下

    var carouselImgs = [] ;

    var fileNames="xxx.jpg,xxx.mp4";
// 获取协会图片介绍getInitFiles(taskInfo.taskFiles)
var initialPreviews = (fileNames ? fileNames.split(","):[] );
var initialPreview = [] ;
var initialPreviewConfig = [] ; for (var i = 0; i < initialPreviews.length; i++) {
var fileName = initialPreviews[i] ;
if (fileName != null && fileName !=''){
var delImg = new Object() ;
delImg = generFilDel(fileName);
initialPreview.push(fileName) ;
initialPreviewConfig.push(delImg) ;
console.log(initialPreviewConfig);
carouselImgs.push(fileName) ;
}
}
$("#carousel_imgs_hidden").val(carouselImgs) ;
// 协会图片介绍
$("#fileinput-demo-1").fileinput({
uploadUrl: "/api/common/upload",
language: 'zh',
// allowedFileExtensions: ['image', 'html', 'text', 'video', 'audio', 'flash', 'object','other'],
//dropZoneEnabled:false,
showClose:false,
showCaption: false,
maxFileCount:10,
showRemove:false,
uploadAsync: true,
enctype: 'multipart/form-data',
validateInitialCount:true,
msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
fileActionSettings:{
showRemove: true,
showUpload: false,
showDownload: true,
},
// previewSettings: {
// image: {width: "200px", height: "160px"},
// }, // allowedPreviewTypes: [];
previewFileType: ['image', 'html', 'text', 'video', 'audio', 'flash'],
allowedPreviewTypes: ['image','video', 'audio'],
overwriteInitial: false,
initialPreviewAsData: true,
initialPreviewFileType: 'image', //'html', 'text', 'video', 'audio', 'flash', 'object'],
initialPreviewShowDelete:true,
initialPreview:initialPreview,
initialPreviewConfig:initialPreviewConfig
// }).on('filepredelete', function(event, key) {
// console.log('Key = ' + key);
}).on("fileuploaded", function(event, data, previewId, index) {
var fileName = data.response.fileName;
$("#"+previewId).attr("fileName", fileName) ;
var carouselImgs=$("#carousel_imgs_hidden").val().split(",");
// var hiddenFilePaths=$("#carousel_imgs_hidden").val();
// carouselImgs =hiddenFilePaths?[]:hiddenFilePaths.split(",");
carouselImgs.push(fileName) ;
$("#carousel_imgs_hidden").val(carouselImgs) ;
}).on("filesuccessremove", function(event, previewId, extra) {
console.log("删除文件");
var fileName = $("#"+previewId).attr("fileName");
var carouselImgs=$("#carousel_imgs_hidden").val().split(",");
// carouselImgs =hiddenFilePaths?[]:hiddenFilePaths.split(",");
var newCarouselImgs = [] ;
for (var i = 0; i < carouselImgs.length; i++) {
if (carouselImgs[i] != fileName)
newCarouselImgs.push(carouselImgs[i]);
}
carouselImgs = newCarouselImgs ;
$("#carousel_imgs_hidden").val(carouselImgs) ;
}).on('filepredelete', function(event, key, jqXHR, data) {
console.log('Key = ' + key);
removeHidden(key);
});
//$("#fileinput-demo-1").fileinput('_initFileActions');//这行代码就是调用绑定删除事件的
function removeHidden(fileName){
var hiddenFilePaths=$("#carousel_imgs_hidden").val().split(",");
for (var i = 0; i < hiddenFilePaths.length; i++) {
if (hiddenFilePaths[i] == fileName){
hiddenFilePaths.splice(i,1);
break;
}
}
console.log(hiddenFilePaths);
$("#carousel_imgs_hidden").val(hiddenFilePaths);
}

function generFilDel(fileName){
var o=new Object();
o.caption = fileName ;
o.url = "/api/common/del";
o.key = fileName;

if(fileName==null||fileName.indexOf(".")==-1){
//return {"type":null,"fileType":null};
o.type="image";
o.filetype="image/"+fileTyp;
return o;
}

var fileTyp=fileName.split(".")[1];

if(["bmp", "gif", "jpg", "jpeg", "png"].join(",").indexOf(fileTyp) !=-1){
o.type="image";
o.filetype="image/"+fileTyp;
return o;
}
if(["mp3"].join(",").indexOf(fileTyp) !=-1){
o.type="audio";
o.filetype="audio/"+fileTyp;
return o;
}
if(["swf", "flv" , "mp4","wav", "wma", "wmv", "mid", "avi", "mpg",
"rm", "rmvb"].join(",").indexOf(fileTyp) !=-1 ){
o.type="video";
o.filetype="video/"+fileTyp;
return o;
}
return o;

}
 

var initialPreview = [] ;
var initialPreviewConfig = [] ; 这两个属性才是显示的东西,
generFilDel 这个方法就是弄一下文件的类型否则渲染出来的格式是这样的

分好类型后可以优雅的展示上传过的文件多媒体文件可以和谐的预览

												

bootstrap inputfile 使用-上传,回显的更多相关文章

  1. bootstrap fileinput 文件上传工具

    这是我上传的第二个plugin 首先第一点就是因为这个好看 符合bootstrap的界面风格 第二是可以拖拽(虽然我不常用这个功能 但是这样界面看起来就丰满了很多) 最后不得不吐槽这个的回发事件 我百 ...

  2. 【Bootstrap】bootstrap-fileinput上传文件插件

    [bootstrap-fileinput] 这是个据传最好用的bootstrap相关联的文件上传控件,支持拖曳上传,多线程上传,上传文件预览等等功能. 首先还是说一下要引入的一些文件: <lin ...

  3. bootstrap fileinput添加上传成功回调事件

    国外牛人做的bootstrap fileinput挺酷的,但是可惜没有提供自定义上传成功回调事件的接口,因此感到非常头疼,但是很幸运的是,我在网上搜索到一个提问帖子,它问到使用Jquery的on函数绑 ...

  4. SpringBoot+BootStrap多文件上传到本地

    1.application.yml文件配置 # 文件大小 MB必须大写 # maxFileSize 是单个文件大小 # maxRequestSize是设置总上传的数据大小 spring: servle ...

  5. bootstrap fileinput 文件上传

    最近因为项目需要研究了下bootstrap fileinput的使用,来记录下这几天的使用心得吧. 前台html页面的代码 <form role="form" id=&quo ...

  6. Bootstrap Fileupload 文件上传

    1.在jsp中引入css与js文件, <link href="${ctx}/plugins/fileup/css/fileinput.css" media="all ...

  7. 基于BootStrap的Collapse折叠(包含回显展开折叠的对应状态)

    情况描述:为了改善页面上的input框太多,采用∧∨折叠展开,这个小东西来控制,第一次做,记录一下ヾ(◍°∇°◍)ノ゙下边是Code 代码: //html代码 <div id="col ...

  8. bootstrap fileinput+MVC 上传多文件,保存

    新增用户资料,需要用户上传多笔附件,所以就尝试用了fileinput控件,显示效果如图: 首先,先在model中定义数据模型: public partial class create { [Requi ...

  9. bootstrap 好看的上传组件

    <!DOCTYPE html> <html> <head> <title></title> <link rel="style ...

随机推荐

  1. mycat 分片的策略

    目的:有 user 和 t_order 两张数据表,表 user 的数据全部存放在 db1_zhang 中,表 t_order 的数据按 id 对 2 取模分别存放在 db1_zhang 和 db2_ ...

  2. C++11 shared_ptr智能指针(超级详细)

    在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如: 有些内存资源已经被释放,但指向它的指针并没 ...

  3. 连接共享打印机失败错误代码0x80070035

    局域网内共享打印机非常方便,但是在连接中经常遇到问题,其中出现错误代码0x80070035的概率非常之高! 1.必须确保有关打印功能的相关服务都处于自动启动状态,重点检查TCP/IP NetBIOS ...

  4. Linux中Java开发常用的软件总结:

    开发工具下载: Tomcat下载:wget http://learning.happymmall.com/tomcat/apache-tomcat-7.0.73.tar.gzJDK下载: wget h ...

  5. list切片

    对list进行切片 取一个list的部分元素是非常常见的操作.比如,一个list如下: >>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素 ...

  6. 单例模式-案例Runtime

    package d.create_type_single; import java.io.IOException; /** * Runtime类就是使用的单例:并且是饿汉式 * (原因考虑是因为:多线 ...

  7. Dockerfile 实践及梳理

    Dockerfile 是一个文本文件,我们可以通过组合一条条的指令 (Instruction),来构建满足我们需求的 Docker 镜像 文档 Best practices for writing D ...

  8. Java通过网络图片之地址,下载到服务器

    @RequestMapping("/downloadTableQrcode") public String downloadTableQrcode(HttpServletReque ...

  9. Mybatis笔记(1)

    一.Mabits简介 1.1 原始JDBC的分析 问题 ①数据库连接创建.释放频繁造成系统资源浪费从而影响系统性能 ②sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,s ...

  10. 安全强化机制——SELinux

    1.基本 SELINUX 安全性概念 SELINUX(Security Enhanced Linux),意思是安全增强型Linux, 是可保护你系统安全性的额外机制 在某种程度上 , 它可以被看作是与 ...