华为云 OBS 分段上传实战:大文件断点续传与并发控制

举报
yd_285894438 发表于 2026/10/31 19:27:16 2026/10/31
【摘要】 从分段上传的三步流程讲起,给出 Python SDK 示例,并总结分片大小、并发数、断点续传与未完成分片清理的实践要点。

为什么需要分段上传

对象存储服务 OBS 的单次 PUT 适合小文件;当文件达到 GB 级时,一旦网络抖动就要整份重传,失败成本很高。分段上传(Multipart Upload)把大文件拆成多个 part 分别上传,全部完成后由服务端合并,既支持断点续传,也能通过并发提升吞吐。

三步核心流程

分段上传由三个动作组成:初始化任务拿到 uploadId;按序号上传各个分片并记录 ETag;最后提交分片清单完成合并。任何一步失败都可以调用 abort 取消任务,避免残留分片继续计费。

from obs import ObsClient

client = ObsClient(access_key_id=ak, secret_access_key=sk, server=endpoint)
resp = client.initiateMultipartUpload(bucket, key)
upload_id = resp.uploadId

parts = []
for i, chunk in enumerate(chunks, start=1):
    r = client.uploadPart(bucket, key, upload_id, i, chunk)
    parts.append({'partNum': i, 'etag': r.body.etag})

client.completeMultipartUpload(bucket, key, upload_id, parts)

分片大小与并发

单个分片建议 8~16 MB,分片数上限为 10000,因此分片大小要随文件大小调整。并发数不是越大越好,需结合出口带宽与客户端内存,一般 4~8 路并发即可跑满千兆网络。分片太小会增加请求次数和合并开销,太大则失去断点续传的粒度。

断点续传怎么做

把 uploadId、已完成分片的序号与 ETag 持久化到本地数据库或配置文件。恢复时先查询已上传分片列表,只为缺失的序号补传,最后用完整清单提交。注意 ETag 必须原样带回,顺序也要与分片号一致。

别忘了清理未完成分片

未完成的分段上传会一直占用存储空间。建议在桶上配置生命周期规则,自动清理 N 天后仍未完成的分段任务;应用侧也要在异常分支调用 abortMultipartUpload,形成双保险。

小结

分段上传的关键不只是“切开传”,而是把 uploadId 与分片状态管理好:合理分片、适度并发、可恢复的断点记录,再加上生命周期兜底清理,才能让大文件上传稳定又可控。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。