一句话定义:分片上传(Multipart Upload)是把一个大文件切成若干小块分别上传,再由服务端按编号拼回完整文件的传输方式。
打个搬家的比方:整面衣柜进不了电梯,就拆成抽屉一箱箱搬,箱子上贴编号,中途坏了只重搬那一箱。
技术上就三步:
1. 客户端把文件切成若干分片(Part);
2. 每片单独发一次请求,服务端返回一个标识(常见的是 ETag),客户端记下来;
3. 全部传完,客户端发「完成」请求并附上分片清单,服务端拼接成完整文件;中途也可「中止」,清掉碎片。
好处不只是断点续传
断点续传是效果,分片上传是常见手段。它同时带来:
- 失败只重传那一片,不必从零开始;
- 多个分片并发上传,单条连接往往吃不满带宽;
- 每片可单独校验(MD5、CRC 之类),出错能精确定位;
- 绕开单次请求的大小上限。
藏在请求数里的成本
一个文件切一万片,就是上万次请求,每次都带鉴权、日志、元数据和限流判断:
- 分片太小:请求数暴涨,服务端每秒请求数(QPS)与元数据写入压力上升;
- 分片太大:失败重传代价高、并行度上不去,客户端也要更多内存或磁盘缓冲;
- 没传完的分片会一直占存储,通常要配一条过期清理规则;
- 分片是覆盖式的,想改文件中间一个字节,一般得重传受影响的那几片。
| 维度 | 整文件上传 | 分片上传 |
|---|---|---|
| 请求数 | 1 | 分片数 + 2 |
| 失败重试 | 整个文件重来 | 只重传失败分片 |
| 并发 | 通常单流 | 多片并行 |
| 适合 | 小文件、图片 | 视频、模型权重、数据集 |
对从业者的意义
模型权重、数据集动辄几十 GB,在本地与对象存储之间搬运时,客户端 SDK 默认走的就是分片。真正要调的只有三个:分片大小、并发数、重试与超时。推荐区间各家不同,以官方文档为准。
对普通职场人,网盘上传视频时看到的「第 3/12 段」、关掉页面再回来还能接着传,背后都是它。
一句话记住:分片上传用「多花几次请求」换「少传很多字节」和「更快的并行」,划不划算取决于分片大小怎么选。
