layui的size参数仅限制单文件大小(单位kb),如size: 2048表示2mb;多文件总大小需在choose回调中手动累加file.size(字节)并转kb校验,超限则return false,且服务端必须二次校验。

size 参数只限制单个文件大小,单位是 KB,不是 MB —— 这是最常踩的坑。写 size: 5 实际只允许 5KB 文件,一张稍大的截图就超了。
怎么正确设置单文件大小上限
直接在 upload.render() 配置里传 size 即可,但必须换算成 KB:
-
size: 2048→ 2MB(2 × 1024) -
size: 5120→ 5MB(5 × 1024) -
size: 0→ 不限制(注意:0 是有效值,不是“忽略”)
超过该值的文件,Layui 会在底层直接过滤掉 —— choose 回调里根本收不到,before 也不会触发。错误提示靠 text["limit-size"] 自定义,不设就用默认文案。
为什么不能靠 size 限制多文件总大小
size 对 multiple: true 场景只作用于每个单独文件。用户选 10 个 1MB 的文件,只要每个 ≤ size,全部都能过前端校验,哪怕总和 10MB 已超标。
- 官方没提供
totalSize或类似配置项 -
number参数管的是文件个数,和体积无关 -
acceptMime和exts也不参与体积判断
真要限制总和,唯一办法是在 choose 回调里手动遍历 obj.files 累加 file.size(单位字节),再除以 1024 转 KB 校验,失败时 return false。
拖拽上传时 size 还生效吗
生效,但仅限单文件校验逻辑。拖拽场景下 acceptMime 失效(浏览器不支持),所以格式校验得靠 exts + choose 或 before 里手动做;而 size 依然由 Layui 底层拦截,和点击选择行为一致。
- 拖入 3 个文件,其中 1 个超
size→ 整批被拦,choose拿不到任何obj.files - 所有文件都 ≤
size,但总和超标 → 必须在choose里自己算,否则放行
服务端二次校验不可省:前端计算可被绕过,size 只是体验层筛子,不是安全边界。
容易被忽略的关键点
obj.files 是原生 File 数组,但 obj.pushFile() 返回的是键值对对象(带索引键),遍历时得用 Object.values(obj.pushFile()) 提取;直接 for...in 会遍历到方法或非 File 属性。另外,拖拽和点击两种入口必须都测 —— 很多人只验证了点击,拖入时总大小逻辑却没生效。











