大文件上传设计

大文件走分片上传:初始化会话、并行上传分片、合并或由对象存储完成分片组装;支持断点续传与校验(分片哈希与整文件哈希),并限制单文件与并发配额。

大文件上传设计是什么

大文件不适合一次请求上传:耗时长、失败要整文件重传、中间层对请求体大小与超时都有限制。标准做法是分片上传——先初始化上传会话拿到分片大小与上传标识,客户端并行上传分片并记录每个分片的结果,上传完成后提交分片清单触发合并,由服务端或对象存储完成组装。配合分片哈希与整文件哈希校验,以及断点续传与过期清理,可以把弱网与大文件场景下最常见的几类问题一次覆盖。

基本信息

核心流程初始化会话 → 并行上传分片 → 提交清单 → 合并校验
关键参数分片大小、并发分片数、会话有效期、单文件大小上限
断点续传记录已上传分片,重试时只补失败分片
校验分片级哈希校验完整性,整文件哈希校验最终结果
清理临时分片设过期规则,失败会话定期回收

典型使用场景

  • 视频与音频素材:文件体积大,弱网下必须支持断点续传
  • 数据导入:大 CSV 或压缩包上传后触发解析任务
  • 备份与归档:客户端把本地备份分片上传到对象存储
  • 镜像与安装包分发:上传到制品库或 CDN 源站
  • 移动端弱网环境:网络切换频繁,按分片重传避免整包重来
  • 多文件批量:对每个文件独立维护会话,失败互不影响

上传流程

上传流程
1. 初始化上传会话(返回分片大小、上传 ID 与会话有效期)
2. 客户端切片并并行上传,记录每片的序号与其返回的校验值
3. 上传中断后重新初始化查询已上传列表,只补缺失分片
4. 全部完成提交分片清单,由服务端或对象存储按序合并
5. 校验整文件哈希;不一致时定位并重传对应分片
6. 合并成功后写入业务元数据,清理临时分片与会话记录

参数与限制

项参考值说明
分片大小5-50 MB过小则元数据与请求开销占比过高
并发分片数3-5受客户端带宽与网关限制约束
会话有效期24 小时过期自动清理临时分片,避免存储累积
重试粒度按分片重传避免整文件重传,节省带宽与时间
单文件上限按业务设定超限在初始化阶段直接拒绝,避免白传
网关与应用层的请求体大小、超时时间要同步调整:分片大小小于网关限制、但网关超时短于单片上传耗时,是分片上传最常见的失败原因。
临时分片要设过期清理规则:失败或被放弃的会话如果一直不回收,存储成本会持续累积,且难以判断哪些分片还能用。

易错点

  • 未清理失败会话的临时分片:存储持续累积,账单与容量一起增长
  • 分片过小:请求元数据开销占比过高,整体反而更慢
  • 网关超时短于单片上传耗时:分片反复失败,客户端不断重试
  • 会话有效期过长且无上限:并发会话数失控,元数据表膨胀
  • 缺少整文件校验:分片全部成功但内容损坏,问题在上线使用时才暴露

数据来源与参考

  • Amazon S3 文档:Multipart Upload
  • Google Cloud Storage 文档:可恢复与分片上传
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌