首页 > 网页制作 >Layui文件上传进度监听方法

Layui文件上传进度监听方法

来源:互联网 2026-07-05 09:51:21

文件上传的进度监听,是很多前端开发者会碰到的一个坎。尤其是在使用layui的upload模块时,progress回调要么不触发,要么看起来就像在跟自己过不去。其实这些问题大多有规律可循,只要把几个关键环节理清楚,调试起来就不至于那么痛苦了。progress回调不触发?先确认四个硬性条件最常见的情况是

文件上传的进度监听,是很多前端开发者会碰到的一个坎。尤其是在使用layui的upload模块时,progress回调要么不触发,要么看起来就像在跟自己过不去。其实这些问题大多有规律可循,只要把几个关键环节理清楚,调试起来就不至于那么痛苦了。

progress回调不触发?先确认四个硬性条件

最常见的情况是写了progress却完全没输出,根本原因是layui压根没进入进度监听流程。必须同时满足以下四点,progress才会被调用:

长期稳定更新的攒劲资源: >>>点此立即查看<<<

Layui文件上传进度监听方法

  • layui 版本 ≥ 2.5.5(查 layui.version,旧版无此回调)
  • auto: false(默认为 true,此时 progress 被跳过)
  • before 回调中 显式 return false(仅写 before 不够,漏掉这句就自动发请求)
  • url 配置正确,且后端接收方式支持 multipart/form-data(传 base64 或普通 json 会导致浏览器无法上报已发送字节数)

多文件上传时进度条互相覆盖?lay-filter 必须唯一

所有文件共用同一个 lay-filter="demo",结果就是后一个文件的进度直接刷掉前一个——这不是 bug,而是 element.progress() 的匹配逻辑决定的。

  • 每个文件生成独立标识,例如 "progress-" + index
  • HTML 中动态插入带不同 lay-filter 的进度条:
  • progress 回调里调用 element.progress("progress-" + index, n + "%")
  • 别忘了在 doneerror 里手动设为 "100%",否则可能卡在 99%

n === 100 并不等于上传成功

progress 里的 n 是浏览器发出请求体的完成度,不是服务端处理结果。常见错误是在 progress 里判断 n === 100 就隐藏 loading 或启用按钮。

  • n === 100 只表示“发完了”,done 才代表“服务器返回了成功响应”
  • 大文件场景下,progress100% 后常要等几秒才进 done(服务端校验、写磁盘、网络延迟)
  • 建议加中间态提示,比如“正在保存…”而非立刻切换 UI 状态
  • 若进度卡在 99% 不动,大概率是服务端配置问题(如 Nginx client_max_body_size、PHP upload_max_filesize 限制)

IE9 及以下不支持,且服务端限制比前端代码更关键

进度事件依赖 XMLHttpRequest.upload.onprogress,IE10+ 才有,IE9 及以下浏览器压根不会触发 progress 回调。

  • 前端代码再完美,服务端上传限制没调大,照样卡住:Nginx 默认 client_max_body_size 1m,PHP 默认 upload_max_filesize 2M
  • 这些限制导致连接提前关闭,前端看到进度停在某个值、无 error、也收不到 done
  • 排查顺序应是:先确认服务端日志是否有 413 错误,再查 Nginx/PHP 配置,最后看前端逻辑

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。