layui.upload 不支持 chunksize 等分片参数,必须在 choose 回调中用 file.slice() 手动切片;accept/exts/size 仅限制文件选择阶段;断点续传需前后端协同实现文件哈希校验、分片存在性检查与临时文件清理。

layui.upload 没有 chunkSize 参数,硬塞进去完全无效
所有在 upload.render 的 options 里写 chunkSize: 5*1024*1024 或 chunked: true 的做法,都不会触发分片——Layui 官方 API 文档中根本不存在这两个字段。你看到的“配置即生效”教程,要么是自行封装的扩展,要么是误读。真正起作用的只有你在 choose 回调里写的 JavaScript。
必须在 choose 回调里用 file.slice() 手动切片
浏览器原生 File.prototype.slice() 是唯一可靠切片手段,但要注意兼容性:IE10+ 才支持,旧环境需降级提示。切片逻辑核心就三变量:
-
chunkSize建议设为2 * 1024 * 1024(2MB)到5 * 1024 * 1024(5MB)之间:太大易超时,太小 HTTP 开销陡增 -
start = currentChunk * chunkSize,end = Math.min(start + chunkSize, file.size):必须用Math.min防止最后一片越界 - 每次
formData.append('file', file.slice(start, end)),同时附带chunk(从 0 开始)、chunks(总片数)、fileId(服务端聚合依据)
accept、exts、size 这些前端限制只是“第一道筛子”
它们拦不住大文件上传行为本身,只影响用户选择阶段:
-
size: 51200表示 50MB,单位是 KB,不是 MB;设太小会误拦,设太大等于没设 -
accept: 'file'几乎无过滤力,真正有效的是组合:accept: 'file'+exts: 'zip|rar|7z'+acceptMime: 'application/zip,application/x-rar-compressed' - 拖拽上传时
acceptMime失效,此时必须在before回调里用file.type或魔数校验
断点续传不是开关,而是前后端协同的三件事
所谓“开启断点续传”纯属虚构,真实链路必须闭环:
- 文件唯一标识不能只靠
file.name + file.size + file.lastModified:后者精度仅秒级,同一秒选两个同名文件就冲突;推荐用 SparkMD5 计算内容哈希 - 服务端必须提供三个接口:文件/分片存在性校验、分片接收暂存、合并通知
- 前端每次上传前先发一次校验请求,若该分片已存在则跳过,否则才上传;失败后重试需携带相同
fileId和chunk
最容易被忽略的是服务端对临时分片的清理策略:不设存活时间或不校验 chunks 总数上限,会导致磁盘被无效碎片占满。











