let wu = null; //需要创建文件选择按钮的容器,一般为div元素 let divID = '#picker'; //单个文件大小限制 const size = 10; //手动初始化上传组件(适用于上传组件是在页面初始化完成后动态添加的情况),id值需#号,比如#picker let currentDIV; let onresort = false; function addUploadBtn(id) { $(id).siblings('.upfile_list').on('click','em',function () { wu.removeFile( $(this).attr("pageuploadId"), true ); $(this).parent().remove(); reSort(); }); wu.addButton(id); } //页面上添加附件 function appendFileName(file, fileId, pageuploadId){ if(onresort){ window.setTimeout(appendFileName(file, fileId, pageuploadId),100); } var index = getFileLength() + 1; let template = `${index}、${file.name}`; currentDIV.siblings('.upfile_list').append(template.toString()); } //获取附件数量,以便进行编号 function getFileLength(){ return $('.upfile_list span').length; } //附件重新排序,重新写编号 function reSort(){ onresort = true; var spans = $('.upfile_list span'); if(spans && spans.length > 0 ){ for (var i = 0; i < spans.length; i++) { var file = spans.eq(i); var name = file.html(); name = (i+1) + name.substring(name.indexOf("、")); file.html(name); } } onresort = false; } //生成随机六位附件名 function getRandomFileName (){ var chars = 'abcdefghijklmnopqrstuvwxyz123456789'; var maxPos = chars.length; var random = ''; var len = 6; for (var i = 0; i < len; i++) { random += chars.charAt(Math.floor(Math.random()*maxPos)); } return random; } $(function(){ $(divID).siblings('.upfile_list').on('click','em',function () { wu.removeFile( $(this).attr("pageuploadId"), true ); $(this).parent().remove(); reSort(); }); function notify(msg, obj){ // console.log("%c Notify: %s, %o", "color: blue; font-size: x-large",msg, obj); $.toast(msg, 1500); } let uploader = WebUploader.create({ // 文件接收服务端。 server: uploadServer, // 选择文件的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: {'id':divID,multiple:false}, // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize: false, //单个文件大小限制(Byte),默认1M fileSingleSizeLimit : size * 1024 * 1024, //一次上传总大小 // fileSizeLimit: 10 * 1024 * 1024, //接受的文件类型 accept: { title: 'file types', extensions: 'jpeg,jpg,png,pdf,doc,docx,xlsx,xls',//多个逗号分隔,比如:jpg,png,doc,zip mimeTypes: 'image/jpeg,image/png,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/zip' //多个用逗号分割 }, //是否自动上传 auto:false, //是否允许在文件传输时提前把下一个文件准备好,多个文件上传可节省时间 prepareNextFile:true, //是否需要分片上传 chunked:false, //分片上传失败,重试次数; chunkRetry:3, compress:{ width: 1600, height: 1600, // 图片质量,只有type为`image/jpeg`的时候才有效。 quality: 90, // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. allowMagnify: false, // 是否允许裁剪。 crop: false, // 是否保留头部meta信息。 preserveHeaders: true, // 如果发现压缩后文件大小比原来还大,则使用原来图片 // 此属性可能会影响图片自动纠正功能 noCompressIfLarger: false, // 单位字节,如果图片大小小于此值,不会采用压缩。 compressSize: 100 * 1024 } }); uploader.on('beforeFileQueued',function(file){ if(!file || !file.name || !file.ext){ return false; } if(!file.size){ notify(file.ext + '文件内容为空或已损坏'); return false; } //上传之前对文件重命名 file.name = getRandomFileName() + '.' + file.ext; }); uploader.on( 'fileQueued', function( file ) { // notify(file.name + ' queued!', file); this.upload(); }); uploader.on( 'uploadStart', function( file ) { // notify(file.name + ' queued!', file); currentDIV = file.source._refer; }); uploader.on('uploadBeforeSend', function (obj, data, headers) { let filename = data.name; filename = Base64.encode(filename); data.dec = filename; }); uploader.on('uploadProgress', function( file, percentage ) { // notify(file.name + " upload progress : " + percentage); }); uploader.on('uploadError', function( file,reason ) { notify(file.name + " upload Error : " + reason , file); }); uploader.on('uploadSuccess', function( file, response ) { var msg = response.data[0].msg; if(response.code==0){ notify("上传到服务器失败" + msg); return false; } var uploadfile = response.data[0]; if (uploadfile == null) { notify("附件上传到服务器失败,请重试"); return false; } var wjfhid = uploadfile.oid,wjmc = uploadfile.name,wjdx = uploadfile.size,wjlx = uploadfile.wjlx; if (wjmc == null || wjmc == "" || wjdx == 0) { notify("附件上传到服务器失败,请重试"); return false; } //存附件表信息 $.ajax({ type:'post', url:fileServer, data :{wjfhid:wjfhid,wjmc:wjmc,wjdx:wjdx,wjlx:wjlx}, success:function(fileId){ appendFileName(file, fileId, file.id); notify("文件上传成功!"); //通过回调传文件id值给页面 let callback = currentDIV.attr('callback'); if(callback){ Function('"use strict";' + callback +'("' + fileId + '");')(); } }, error:function(res){ notify("同步文件信息失败 :" + res); } }); }); uploader.on('uploadComplete', function( file ) { // notify(file.name + " upload complete! "); }); uploader.on('error',function(msg, limit){ switch(msg) { case 'F_EXCEED_SIZE': { notify('文件大小超出限制'); break; } case 'Q_EXCEED_SIZE_LIMIT': { notify('文件总大小超出限制 '); break; } case 'Q_TYPE_DENIED': { notify('文件类型不符合要求'); break; } case 'F_DUPLICATE': { notify('文件重复'); break; } default: { notify('上传发生错误:上传超时'); break; } } }); //expose uploader wu = uploader; });