分片上传是什么
分片上传(multipart upload)把大文件切成多个分片并发上传,全部分片成功后再由服务端合并为一个对象。它解决三件事:单次请求体过大容易失败、支持断点续传、以及并发上传提升速度。需要特别注意的是,中断的上传会留下未完成分片(碎片),必须显式取消或靠生命周期规则清理,否则持续占用桶容量并计费。
基本信息
| 阿里云 OSS | 分片 1-10000 块,每块 100 KB - 5 GB(末块可更小) |
|---|---|
| 腾讯云 COS | 分块 1-10000 块,块大小规则以官方文档为准 |
| 完成条件 | 所有分片上传成功后才合并为对象,未完成不产生完整对象 |
| 中断处理 | 未完成分片成为碎片,需手工取消或配置生命周期清理 |
| 工具支持 | SDK 与命令行工具通常自动分片并支持断点续传 |
典型使用场景
- 上传视频、备份包、数据集等超过单请求限制的大文件
- 弱网或跨国链路下需要断点续传,避免失败后整包重传
- 用并发分片提升大文件上传速度,缩短交付窗口
- 排查桶容量占用时清点未完成分片产生的碎片
- 对长期存在的碎片配置生命周期规则自动清理
分片上传四步
分片上传四步
# 1 初始化:创建 multipart 任务,拿到 uploadId
# 2 分片上传:并发上传各分片,记录每片的序号与 ETag
# 3 完成:按分片序号升序提交 ETag 列表,服务端合并成对象
# 4 中止:任一环节放弃时调用 abort,释放已上传分片
# 清点碎片:SDK 或 ossutil 的 list multipart uploads 接口规则与异常
| 对象 | 正常表现 | 异常表现 |
|---|---|---|
| 分片大小 | 落在允许区间内(如 100 KB - 5 GB) | 超出范围时接口直接报错 |
| 分片数量 | 不超过 1 万块 | 文件极大且分片过小,触发数量上限 |
| ETag 顺序 | 按分片序号升序提交 | 顺序错乱导致合并结果损坏或完成接口报错 |
| 碎片 | 上传流程结束后为 0 | 残留碎片长期占用桶容量并产生费用 |
网络中断后直接重传整个文件会造成重复流量与更长耗时;应使用 SDK 的断点续传能力,或自行记录 uploadId 与已成功分片之后续传。
自定义分片大小时必须落在厂商允许区间内;并发数过高会挤占带宽并可能触发限流,建议按链路质量与目标带宽调整并发数。