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一一致,后台就考可以获取到上传的图片了