onChangeUploadFile: function() { var fileInput = this.fileInput; var files = fileInput.files; var file = files[0]; var _view_ = this; var fileObjs = $(fileInput)[0].files[0]; var filePath = $(fileInput).val(); var filename = file.name; var r = new FileReader(); //本地预览 r.onload = function() { _view_.me.find("img").attr("src", r.result); _view_.me.find("img").attr("title", filename); if (_view_.callback) { _view_.callback(r.result); } }; r.readAsDataURL(fileObjs); },回复
不能选择同一张是因为input 已经有同一个file文件了,只需要把input的值清空即可。
createImageUploadDialog: function() { var fileInput = this.fileInput; if (!fileInput) { fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.name = 'ime-images'; fileInput.multiple = true; fileInput.onchange = this.onChangeUploadFile.bind(this); this.fileInput = fileInput; } fileInput.value = ''; //这里清空input的值,即可解决选择同一文件无法触发回调的问题 fileInput.click(); }
下面我分享一下支持IE浏览器的base64编码写法:
onChangeUploadFile: function() { var fileInput = this.fileInput; var files = fileInput.files; var file = files[0]; var _view_ = this; var fileObjs = $(fileInput)[0].files[0]; var filePath = $(fileInput).val(); var filename = file.name; var r = new FileReader(); //本地预览 r.onload = function() { _view_.me.find("img").attr("src", r.result); _view_.me.find("img").attr("title", filename); if (_view_.callback) { _view_.callback(r.result); } }; r.readAsDataURL(fileObjs); },
感谢作者的分享,但是此插件不支持IE浏览器,所以我做了一下调整,就是将
window.URL.createObjectURL(file)
获取路径改为通过路径获取图片的base64编码来达到预览的效果。
$("#fileinput").fileinput({ uploadUrl: '/user/upload_img', // you must set a valid URL here else you will get an error language: 'zh', allowedFileExtensions: ['jpg', 'png', 'gif'], overwriteInitial: false, maxFileSize: 10000, maxFilesNum: 3, minFileCount: 1, showCaption: false, ZoneEnabled: false, browseClass: "btn btn-danger", enctype: 'multipart/form-data' });
1.在初始方法中 记录下id的信息,用来给后面input type=file 命名
DragImgUpload(id,options){ this.me=$(id); this.namef=id.substring(1);//去掉#号
2.在上传文件对话方法中 给生成的fileinput加name
createImageUploadDialog:function(){ .... fileInput=document.createElement('input'); fileInput.type='file'; fileInput.name=this.namef;
3.上传图片后,把生成的file 添加到元素中,
onChangeUploadFile:function(){ .... this.me.remove('input'); //这里删除是因为有可能重新上传图片 this.me.append(fileInput);
4.在页面样式中将 input设为隐藏的 不会影响界面的显示
//给你举个例子 var dragImgUpload = new DragImgUpload("#_area",{ callback:function (files) { //回调函数,可以传递给后台等等 var file = files[0]; var formData = new FormData(); formData.append("importFilePath",file ); formData.append("folderId",file.name); formData.append("softType",file..type); if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(file.name)) { toastr["error"]($.i18n.prop("pictureType")) return false; }else{ $.ajax({ url: g_url_updateUserImg, type:'POST', contentType: false, processData: false, data: formData, success:function(data,textstatus){ if(data.success==true){ //回台返回上传成功操作 }else{ toastr["error"]($.i18n.prop("modifiedFailure")); } } }); } } })
1.在初始方法中 记录下id的信息,用来给后面input type=file 命名
DragImgUpload(id,options){ this.me=$(id); this.namef=id.substring(1);//去掉#号
2.在上传文件对话方法中 给生成的fileinput加name
createImageUploadDialog:function(){ .... fileInput=document.createElement('input'); fileInput.type='file'; fileInput.name=this.namef;
3.上传图片后,把生成的file 添加到元素中,
onChangeUploadFile:function(){ .... this.me.remove('input'); //这里删除是因为有可能重新上传图片 this.me.append(fileInput);
4.在页面样式中将 input设为隐藏的 不会影响界面的显示
这样就在前台界面上生成了一个
<input type="file" name=""/>
name和对应的div的id一一致,后台就考可以获取到上传的图片了