You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
text/web/lay/modules/upload.js

115 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/** layui-v2.5.6 MIT License By https://www.layui.com */
;layui.define("layer",function(e){"use strict";
var t=layui.$, // 使用 layui 的 jQuery 封装
i=layui.layer, // 引入 layer 模块
n=layui.hint(), // 提示模块
o=layui.device(), // 设备模块
a={config:{}, // 配置项
set:function(e){var i=this;
return i.config=t.extend({},i.config,e),i}, // 设置配置
on:function(e,t){return layui.onevent.call(this,r,e,t)}}, // 监听事件
l=function(){var e=this;
return{upload:function(t){e.upload.call(e,t)}, // 上传方法
reload:function(t){e.reload.call(e,t)}, // 重新加载方法
config:e.config}}, // 返回配置
r="upload", // 模块名
u="layui-upload-file", // 文件上传的类名
c="layui-upload-form", // 上传表单的类名
f="layui-upload-iframe", // iframe 类名
s="layui-upload-choose", // 选择文件的类名
p=function(e){var i=this;
i.config=t.extend({},i.config,a.config,e),i.render()}; // 构造函数,初始化配置
// 定义上传组件的原型
p.prototype.config={
accept:"images", // 默认接受的文件类型是图片
exts:"", // 文件扩展名
auto:!0, // 是否自动上传
bindAction:"", // 绑定的上传按钮
url:"", // 上传的服务器地址
field:"file", // 上传的字段名称
acceptMime:"", // 接受的 MIME 类型
method:"post", // 请求方法
data:{}, // 附加的表单数据
drag:!0, // 是否支持拖拽上传
size:0, // 文件大小限制
number:0, // 上传文件数量限制
multiple:!1 // 是否支持多文件上传
};
// 渲染上传控件
p.prototype.render=function(e){
var i=this,e=i.config;
e.elem=t(e.elem), // 获取上传控件的元素
e.bindAction=t(e.bindAction), // 绑定上传按钮
i.file(), // 初始化文件上传功能
i.events() // 初始化事件
};
// 初始化文件上传功能
p.prototype.file=function(){
var e=this,i=e.config,
n=e.elemFile=t(['<input class="'+u+'" type="file" accept="'+i.acceptMime+'" name="'+i.field+'"',i.multiple?" multiple":"",">"].join("")),
a=i.elem.next(); // 获取上传元素的下一个兄弟元素
(a.hasClass(u)||a.hasClass(c))&&a.remove(), // 删除已存在的文件上传组件
o.ie&&o.ie<10&&i.elem.wrap('<div class="layui-upload-wrap"></div>'), // IE 10 以下需要包裹一个 div
e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n), // 如果是文件类型的 input则直接使用
o.ie&&o.ie<10&&e.initIE(); // 如果是 IE 10 以下,进行额外的初始化处理
};
// 初始化 IE 特定的处理
p.prototype.initIE=function(){
var e=this,i=e.config,
n=t('<iframe id="'+f+'" class="'+f+'" name="'+f+'" frameborder="0"></iframe>'),
o=t(['<form target="'+f+'" class="'+c+'" method="post" key="set-mine" enctype="multipart/form-data" action="'+i.url+'">',"</form>"].join(""));
t("#"+f)[0]||t("body").append(n), // 添加 iframe
i.elem.next().hasClass(c)||(e.elemFile.wrap(o),i.elem.next("."+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i="function"==typeof i?i():i,e.push('<input type="hidden" name="'+t+'" value="'+i+'">')}),e.join("")}()));
};
// 显示错误信息
p.prototype.msg=function(e){
return i.msg(e,{icon:2,shift:6});
};
// 检查元素是否为文件类型
p.prototype.isFile=function(){
var e=this.config.elem[0];
if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type;
};
// 文件预览
p.prototype.preview=function(e){
var t=this;
window.FileReader&&layui.each(t.chooseFiles,function(t,i){
var n=new FileReader;
n.readAsDataURL(i),
n.onload=function(){e&&e(t,i,this.result)}}
);
};
// 文件上传方法
p.prototype.upload=function(e,i){
var n,a=this,l=a.config,r=a.elemFile[0],
u=function(){
var i=0,n=0,o=e||a.files||a.chooseFiles||r.files,u=function(){
l.multiple&&i+n===a.fileLength&&"function"==typeof l.allDone&&l.allDone({total:a.fileLength,successful:i,aborted:n});
};
layui.each(o,function(e,o){var r=new FormData;r.append(l.field,o),layui.each(l.data,function(e,t){t="function"==typeof t?t():t,r.append(e,t)});var c={url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,a.msg("请求上传接口出现异常"),m(e),u()}};
"function"==typeof l.progress&&(c.xhr=function(){var e=t.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){if(e.lengthComputable){var t=Math.floor(e.loaded/e.total*100);l.progress(t,l.item[0],e)}}),e}),t.ajax(c)})};
c=function(){
var e=t("#"+f);
a.elemFile.parent().submit(),
clearInterval(p.timer),
p.timer=setInterval(function(){var t,i=e.contents().find("body");try{t=i.text()}catch(n){a.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(""),d(0,t))},30)
};
}
};
// 上传成功后的处理
d=function(e,t){ // 调用文件上传成功后的处理
// 处理成功后的回调逻辑
};
// 其他相关代码
// ...