近期用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. nodejs koa2 设置 静态资源目录

    参考这篇文章:https://blog.csdn.net/qq_38262910/article/details/89147571?utm_medium=distribute.pc_relevant_ ...

  2. C#的6种常用集合类

    一.先来说说数组的不足(也可以说集合与数组的区别): 1.数组是固定大小的,不能伸缩.虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的 ...

  3. dataTemplate 的使用之listView

    <Window x:Class="WpfApplication1.Window39" xmlns="http://schemas.microsoft.com/win ...

  4. 今天突发奇想写了一个小工具,CSDN文章目录生成器

    Why 文章被遗忘 文章检索不好用 方便总结个人知识 What 根据文章分类生成文章目录 莫逸风文章目录 项目地址 gitee(地址)

  5. jQuery中的文档操作处理(五):append()、prepend()、after()、before()、wrap()、wrapAll()、wrapInner()、clone()等

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. VMware ESXi 7.0 U2 SLIC & Unlocker Intel NUC 专用镜像 202109 更新

    2021.08.31 更新:集成 "vmkusb-nic-fling" 和 "nvme-community",现在只有一个镜像. 2021.06.16 更新:集 ...

  7. Springboot 日志、配置文件、接口数据如何脱敏?老鸟们都是这样玩的!

    一.前言 核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏.下面陈某带大家从以下三个方面讲解一下隐私数据如何脱敏,也是日常开发中需要注意的: 配置文件数据脱敏 接口返回 ...

  8. Linux nginx 负载的几种方式

    2021-08-191. 轮询 (这是默认的方式)就是在 nginx 映射的几个服务器按请求的时间顺序逐一分配,几率是随机的.如果后端服务器 down 掉,能自动忽略不用.这种情况一般是每台服务器配置 ...

  9. golang net/http包

    http协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为 ...

  10. Python之requests模块-大文件分片上传

    最近在做接口测试时,拿到一个分片上传文件的接口,http接口请求头中的Content-Type为multipart/form-data.需要在客户端将大文件分片成数据块后,依次传给服务端,由服务端还原 ...