php 获取layui多文件,Layui多文件上传获取进度回调【原创】

该博客介绍了如何修改layui的upload.js文件以支持多文件上传,并详细阐述了添加进度回调的步骤。通过编辑upload.js,添加特定的id标识来区分上传单位,实现了在进度回调函数中对每个文件进行单独处理的功能。此外,还提供了一个多文件上传的完整HTML代码示例,包括文件列表展示、上传进度显示和操作状态更新等。
摘要由CSDN通过智能技术生成

默认的回调只针对于单一文件上传,不适用于多文件上传,要支持多文件需要对upload.js做一些简单的修改。首先利用编辑器追踪到upload.js文件(下面这段代码位置),然后开始新增两段代码(有注释的为新增代码)。layui.each(o, function(e, o) {

var r = new FormData;

var id=e;//此变量为区分上传单位的id

r.append(l.field, o), layui.each(l.data, function(e, t) {

t = "function" == typeof t ? t() : t, r.append(e, t)

}), t.ajax({

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()

},

xhr: function() {

var e = new XMLHttpRequest;

return e.upload.addEventListener("progress", function(e) {

if (e.lengthComputable) {

e.id=id;//将当前id赋值到e对象,也可新增一参数单独传

/**var k=id;**/单独传

var t = Math.floor(e.loaded / e.total * 100);

"function" == typeof l.progress && l.progress(t, e/*,k*/)

}

}), e

}

})

})

修改完后即可在进度回调函数做对应处理,下面是多文件上传完整代码html>

Layui

.layui-progress-big{width: 500px}

高级应用:制作一个多文件列表

选择多文件

文件名进度大小状态操作

开始上传

layui.use(['upload','element'], function(){

var upload = layui.upload;

var element = layui.element;

var aa={};

//多文件列表示例

var demoListView = $('#demoList')

,uploadListIns = upload.render({

elem: '#testList'

,field:'img'

,url: ""

,accept: 'file'

,multiple: true

,auto: false

,bindAction: '#testListAction'

,choose: function(obj){

var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列

//读取本地文件

obj.preview(function(index, file, result){

var tr = $(['

'

,'

'+ file.name +''

,"

\n" +

"

"

"

,'

'+ (file.size/1014).toFixed(1) +'kb'

,'

等待上传'

,'

'

,'重传'

,'删除'

,'

'

,'

'].join(''));

//单个重传

tr.find('.demo-reload').on('click', function(){

obj.upload(index, file);

});

//删除

tr.find('.demo-delete').on('click', function(){

delete files[index]; //删除对应的文件

tr.remove();

uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选

});

demoListView.append(tr);

element.render();

});

}

,allDone: function(obj){ //当文件全部被提交后,才触发

}

,progress: function(n,index){

var percent = n + '%' //获取进度百分比

element.progress(index.id, percent); //可配合 layui 进度条元素使用

}

,done: function(res, index, upload){

if(res.code == 0){ //上传成功

var tr = demoListView.find('tr#upload-'+ index)

,tds = tr.children();

tds.eq(3).html('上传成功');

tds.eq(4).html(''); //清空操作

return delete this.files[index]; //删除文件队列已经上传成功的文件

}

this.error(index, upload);

}

,error: function(index, upload){

var tr = demoListView.find('tr#upload-'+ index)

,tds = tr.children();

tds.eq(3).html('上传失败');

tds.eq(4).find('.demo-reload').removeClass('layui-hide'); //显示重传

}

});

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值