Layui upload 不支持直接限制多文件总大小,必须在 choose 回调中遍历 obj.files 手动累加 file.size(字节)并转 KB 校验,失败时 return false;服务端需二次校验,且拖拽上传同样触发该逻辑。
layui upload 不支持直接限制多文件总大小
官方 size 参数只限制单个文件大小(单位 kb),对 multiple 场景下所有文件体积之和无约束。你配置 size: 2048,用户仍可选 10 个 1mb 的文件 —— 每个都合规,但总和 10mb 已超预期。
必须在 choose 回调里手动累加校验
这是唯一可靠方式。Layui 在 choose 阶段才暴露原始 File 对象列表,此时可遍历 obj.files 获取每个 file.size 并求和。
-
obj.files是原生 File 数组,file.size单位为字节,需除以 1024 转 KB - 不要用
obj.pushFile()—— 它返回的是带索引键的对象,遍历时需Object.values()提取 - 校验失败必须
return false,否则后续流程(如预览、上传)仍会执行 - 建议同步提示具体剩余容量,比如“最多 5MB,当前已选 4.2MB,还可添加约 0.8MB 文件”
注意 exts 和 acceptMime 不影响总大小判断
文件后缀(exts)和 MIME 类型(acceptMime)只控制格式合法性,与体积无关。你在 choose 里做总大小校验时,无需也不应耦合格式检查逻辑 —— 它们属于不同维度的校验,应分开处理、独立提示。
常见错误是把 size 和总大小混为一谈,或误以为 number 参数能控制体积。实际上 number: 5 只限制“最多选 5 个文件”,不管每个多大。
服务端必须二次校验总大小
前端计算可被绕过:用户改写 JS、用 curl 直传、或禁用 JS 后提交。Node.js/Java/PHP 等后端收到文件流后,需实时累加已接收字节数,超限时立即中断并返回错误。不能依赖前端传来的“总大小”字段 —— 那个值完全不可信。
真正容易被忽略的点是:拖拽上传(dragend 事件)也会触发 choose,但部分开发者只测试了点击选择,忘了拖入场景。务必在两种入口下都验证总大小逻辑是否生效。


















