更新时间:2025-09-12 GMT+08:00
分享

多段上传

使用场景

分段上传将单个对象拆分为多个分片分别上传,当对象的所有分片都上传后,OBS将这些段合并起来,然后创建对象。一般而言,如果您的对象大小达到了100MB,应考虑使用多段上传,而不是使用简单上传。使用分段上传具有以下优势:

  • 提高吞吐量:多个分片并行上传可以提高上传速度,最大限度地利用您的带宽。
  • 更好地适应网络波动:如果某一个分片因为网络原因上传失败,只需要重新上传该分片即可,无需重新上传整个对象,帮助您节省时间和流量。
  • 未知对象大小之前开始上传:如果您在上传对象时无法确认对象的最终大小,例如视频监控场景下,视频文件是实时生成并上传的,这种情况下可使用分段上传。

约束与限制

  • 文件夹不支持多段上传。
  • 一个请求只能上传一个段,可以同时发起多个请求。
  • 分段相关限制:
    表1 分段相关限制

    项目

    限制

    对象大小

    最大48.8TB

    每次上传的段的数量

    最大10000

    段编号

    1到10000(含)

    段大小

    100KB到5GB,最后一个段大小是0到5GB

    列举已上传的段请求返回的段数量

    最大1000

    列举已初始化多段任务请求返回的任务数量

    最大1000

  • 如果您使用SSE-C加密方式,需要在初始化上传段任务上传段拷贝段的过程中携带密钥信息,且同一个任务内的多段操作,携带的密钥必须保持一致。合并段无需携带密钥,合并后的对象是一个使用SSE-C方式加密的对象。
  • 如果您使用SSE-KMS或者SSE-OBS加密方式,只需要在初始化上传段任务时配置好加密方式、算法和密钥信息。

费用说明

  • 如果要上传深度归档对象,且上传数量较多的时候,为了降低PUT类请求费用,建议您先使用标准存储进行上传,然后通过生命周期规则将其转储为深度归档类型。
  • 初始化上传段任务并上传一个或多个段之后,您必须合并段或取消多段上传任务,OBS才能释放已上传段的存储空间,并停止向您收取分段存储费用。

权限说明

执行多段上传相关操作前,您需要按照下表获取相关权限:

操作

所需权限

初始化上传段任务

您必须是桶拥有者或者拥有PutObject权限。

上传段

您必须拥有PutObject操作的权限。

合并段

您必须拥有PutObject操作的权限。

拷贝段

您必须是拥有PutObjectGetObject操作的权限。

列举已上传的段

您必须是桶拥有者或者拥有ListMultipartUploadParts权限。

列举多段上传任务

您必须是桶拥有者或者拥有ListBucketMultipartUploads权限。

取消多段上传任务

您必须是桶拥有者或者拥有AbortMultipartUpload权限。

注意事项

  • 如果上传过程中本地文件发生了改变,则需要重新上传所有分片。
  • 多并发上传同一对象的同一段时,服务端遵循Last Write Win策略,但“Last Write”的时间定义为段元数据创建时间。为了保证数据准确性,客户端需要加锁保证同一对象的同名段上传的并发性。同一对象的不同段并发上传不需要加锁。
  • 上传大量对象时,不要使用顺序前缀(如时间戳或字母顺序)的对象名。因为顺序前缀命名可能会出现大量对象索引集中存储于存储空间中某个特定分区的情况。此时如果请求速率过大,会导致请求速率下降。
  • 建议您开启多版本控制功能防止同名对象被意外覆盖。开启后,被覆盖的对象会以历史版本的形式保存下来,您可以随时恢复历史版本对象。

多段上传流程

图1 多段上传流程图
表2 多段上传流程

序号

操作

说明

1

文件分段

在本地客户端将大文件进行分段处理,单个分段的大小限制为100KB到5GB,最后一个段大小限制是0到5GB。

2

初始化上传段任务

初始化上传任务并获取任务ID,后续的上传段、合并段、列举段等操作都需要携带这个ID,以表明这些操作都归属于指定ID的分段任务。

初始化阶段还会设置对象的多个属性,例如对象的存储类别、对象ACL等。后续的上传段、合并段无需再重复设置这些属性。

3

上传段

上传分段,每一个分段都可以独立上传,并且可以按照任意顺序上传。如果您的网络状况良好,可以使用并发上传以提高速度并充分利用带宽。如果任意分段传输失败,只需重新传输该分段且不会影响其它分段。

如需中止上传,请使用取消多段上传任务接口取消上传并删除已上传至桶中的分段。

4

合并段

当所有分段都成功上传后,开始合并段,将多个分段合并成一个完整的对象。

多段上传示例

OBS控制台、OBS Browser+、obsutil将详细的多段上传步骤进行了封装,您无需感知具体步骤,只需使用界面或者命令行直接上传即可,详情参见使用方式。为了帮助您理解完整的多段上传过程,此处使用API Explorer工具调用OBS API,为您详细演示完整的上传段过程:

使用方式

OBS支持通过控制台、API、SDK、OBS Browser+、obsutil方式上传对象。

为了提高您上传对象的成功率,对象大于8M时控制台会自动使用多段上传,大于50M时OBS Browser+、obsutil会自动使用断点续传(本质上是多段上传)。您无需感知后台的切换动作,您在控制台和工具中的操作保持不变。

相关操作

以下是和多段上传相关的其他操作:

相关文档

如果您有大量的数据(大于48.8TB)需要上传至OBS,可以参考搬迁本地数据至OBS迁移第三方云厂商数据至OBS

相关文档