近期用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. 网页前端video播放m3u8(HLS)

    网页前端video播放m3u8(HLS) HLS (HTTP Live Streaming)是Apple公司研发的流媒体传输技术,包括一个m3u8的索引文件.多个ts分片文件和key加密串文件.这项技 ...

  2. jquery validate 如何校验多个相同name

    在表单页中有如下代码 <form> <input name="zhai"/><!-- 三个相同name的input --> <input ...

  3. Executor执行器

    Executors: CachedThreadPool  将为每个任务创建一个线程. public class CachedThreadPool { public static void main(S ...

  4. 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建一个版本

    我们可以使用官方 sentry-cli 工具操作 Sentry API,从而来为你的项目管理一些数据.它主要用于管理 iOS.Android 的调试信息文件,以及其他平台的版本(release)和源代 ...

  5. 并发编程之:ThreadLocal

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 从前上一期[并发编程之:synchronized] 我们学到要保证在并发情况下对于共享资源的安全访问,就需要用到锁. 但是,加锁通常情况下会让运行效率 ...

  6. (一)羽夏看C语言——简述

    "羽夏看C语言"介绍什么   本系列从汇编的角度,比较翔实的介绍C语言.C++和C其实是一样的东西,C++的编译器只是更强大,更能帮助我们写代码,例如模板.没有特殊说明,本系列不会 ...

  7. 性能测试工具JMeter 基础(四)—— 录制脚本

    对于JMeter中HTTP请求除了手动添加以为还可以进行脚本录制,有两个方法: 使用badboy录制,录制完成后,将录制的文件导入JMeter中 使用JMeter自带的录制原件进行录制(HTTP(S) ...

  8. Python - 文件模式a+读取不了文件

    代码 f = open('test/gbk.txt', 'a+', encoding='utf-8') print(f.readline()) 最终的执行结果是输出空,为什么呢? a+模式打开文件指针 ...

  9. Intel® QAT 加速卡之IPSec示例

    Intel QAT 加速卡之IPSec示例 文章目录 Intel QAT 加速卡之IPSec示例 1. QAT处理IPSec入站报文 2. QAT处理IPSec出站报文 3. 组织架构 4. 示例源码 ...

  10. SQL-Instead of 触发器

    定义及优点 INSTEAD OF触发器指定执行触发器而不是执行触发 的SQL 语句,从而替代触发语句的操作.        在表或视图上,每个 INSERT.UPDATE 或 DELETE 语句最多可 ...