大文件上传设计是什么
大文件不适合一次请求上传:耗时长、失败要整文件重传、中间层对请求体大小与超时都有限制。标准做法是分片上传——先初始化上传会话拿到分片大小与上传标识,客户端并行上传分片并记录每个分片的结果,上传完成后提交分片清单触发合并,由服务端或对象存储完成组装。配合分片哈希与整文件哈希校验,以及断点续传与过期清理,可以把弱网与大文件场景下最常见的几类问题一次覆盖。
基本信息
| 核心流程 | 初始化会话 → 并行上传分片 → 提交清单 → 合并校验 |
|---|---|
| 关键参数 | 分片大小、并发分片数、会话有效期、单文件大小上限 |
| 断点续传 | 记录已上传分片,重试时只补失败分片 |
| 校验 | 分片级哈希校验完整性,整文件哈希校验最终结果 |
| 清理 | 临时分片设过期规则,失败会话定期回收 |
典型使用场景
- 视频与音频素材:文件体积大,弱网下必须支持断点续传
- 数据导入:大 CSV 或压缩包上传后触发解析任务
- 备份与归档:客户端把本地备份分片上传到对象存储
- 镜像与安装包分发:上传到制品库或 CDN 源站
- 移动端弱网环境:网络切换频繁,按分片重传避免整包重来
- 多文件批量:对每个文件独立维护会话,失败互不影响
上传流程
上传流程
1. 初始化上传会话(返回分片大小、上传 ID 与会话有效期)
2. 客户端切片并并行上传,记录每片的序号与其返回的校验值
3. 上传中断后重新初始化查询已上传列表,只补缺失分片
4. 全部完成提交分片清单,由服务端或对象存储按序合并
5. 校验整文件哈希;不一致时定位并重传对应分片
6. 合并成功后写入业务元数据,清理临时分片与会话记录参数与限制
| 项 | 参考值 | 说明 |
|---|---|---|
| 分片大小 | 5-50 MB | 过小则元数据与请求开销占比过高 |
| 并发分片数 | 3-5 | 受客户端带宽与网关限制约束 |
| 会话有效期 | 24 小时 | 过期自动清理临时分片,避免存储累积 |
| 重试粒度 | 按分片重传 | 避免整文件重传,节省带宽与时间 |
| 单文件上限 | 按业务设定 | 超限在初始化阶段直接拒绝,避免白传 |
网关与应用层的请求体大小、超时时间要同步调整:分片大小小于网关限制、但网关超时短于单片上传耗时,是分片上传最常见的失败原因。
临时分片要设过期清理规则:失败或被放弃的会话如果一直不回收,存储成本会持续累积,且难以判断哪些分片还能用。