Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

分段上传概述

分段上传 API 允许您分段上传大型对象。您可以使用此 API 上传新的大型对象或创建现有对象的副本 (参阅 在对象上的操作)。

分段上传有三个步骤:开始上传、上传对象分段,以及在上传所有分段后,完成分段上传。收到完成分段上传请求后,Amazon S3 将构建来自已上传分段的对象,然后您可以像在您的存储桶中访问任何其他对象一样访问该对象。

您可以列出所有正在进行的分段上传,或获取已对特定分段上传上传的分段列表。以上每个操作都在本节中进行了说明。

分段上传开始

当您发送请求以开始分段上传时,Amazon S3 将返回具有上传 ID 的响应,此 ID 是分段上传的唯一标识符。无论您何时上传分段、列出分段、完成上传或中止上传,您都必须包括此上传 ID。如果您想要提供描述已上传的对象的任何元数据,必须在请求中提供它以开始分段上传。

分段上传

上传分段时,除了指定上传 ID,还必须指定分段编号。您可以选择 1 和 10000 之间的任意分段编号。分段编号在您正在上传的对象中唯一地识别分段及其位置。您选择的分段编号不必是连续序列 (例如,它可以是 1、5 和 14)。如果您使用之前上传的分段的同一分段编号上传新分段,则之前上传的分段将被覆盖。只要您上传分段,Amazon S3 都会在其响应中返回 ETag 标头。对于每个分段上传,您必须记录分段编号和 ETag 值。您需要在随后的请求中包括这些值以完成分段上传。

注意

启动分段上传并上传一个或多个段之后,您必须完成或中止分段上传,才能停止收取上传的段的存储费用。只有在完成或中止分段上传之后,Amazon S3 才会释放段存储并停止向您收取段存储费用。

分段上传完成 (或中止)

完成分段上传后,Amazon S3 会按段编号的升序顺序将各个段连接起来,从而创建对象。如果在开始分段上传 请求中提供了任何对象元数据,则 Amazon S3 会将该元数据与该对象相关联。成功完成请求后,分段将不再存在。完成分段上传 请求必须包括上传 ID、分段编号和相应的 ETag 值的列表。Amazon S3 响应包括可唯一识别组合对象数据的 ETag。此 ETag 无需成为对象数据的 MD5 哈希。您可以选择中止分段上传。中止分段上传后,无法再次使用该上传 ID 上传任何分段。然后,将释放使用的中止分段上传中的任何分段的所有存储。如果任何分段上传已在进行中,即使您已执行中止操作,它们仍可以上传成功或失败。要释放所有分段使用的所有存储,必须在完成所有分段上传后仅中止分段上传。

分段上传列表

您可以列出特定分段上传或所有正在进行的分段上传的分段。列出分段操作将返回您已为特定分段上传而上传的分段信息。对于每个列出分段请求,Amazon S3 将返回有关特定分段上传的分段信息,最多为 1000 个分段。如果分段上传中的分段超过 1000 个,您必须发送一系列列出分段请求以检索所有分段。请注意,返回的段列表不包括未完成上传的段。使用列出分段上传操作,您可以获得正在进行的分段上传的列表。正在进行的分段上传是已开始但还未完成或中止的上传。每个请求将返回最多 1000 个分段上传。如果正在进行的分段上传超过 1000 个,您需要发送其他请求以检索剩余的分段上传。仅使用返回的列表进行验证。发送完成分段上传请求时,您不应使用此列表的结果。但是,当上传分段和 Amazon S3 返回的相应的 ETag 值时,将保留您自己的指定分段编号的列表。

并发分段上传操作

在分布式开发环境中,您的应用程序可以同时在同一对象上开始多个更新。您的应用程序可能会使用同一对象键开始多个分段上传。然后,对于其中每个上传,您的应用程序可以上传分段并将完成上传请求发送到 Amazon S3,以创建对象。当存储桶启用了版本控制时,完成分段上传将始终创建一个新版本。对于未启用版本控制的存储桶,在开始分段上传和完成分段上传期间接收的某些其他请求可能会优先开始。

注意

在开始分段上传和完成分段上传期间接收的某些其他请求可能会优先开始。例如,如果在使用键开始分段上传之后,但在完成分段上传之前其他操作删除了该键,则完成分段上传响应可能表示在未看到对象的情况下即成功创建了对象。

分段上传和定价

开始分段上传后,Amazon S3 将保留所有分段,直到您完成或中止上传。在整个其生命周期内,您将支付有关此分段上传及其关联分段的所有存储、带宽和请求的费用。如果您中止分段上传,Amazon S3 将删除上传项目和已上传的任何段,您将不再支付它们的费用。有关定价的更多信息,请参阅 Amazon S3 定价

使用存储桶生命周期策略中止未完成的分段上传

启动分段上传后,您便开始上传段。Amazon S3 将存储这些段,但它只有在您上传所有这些段并发送完成分段上传的 successful 请求(您应验证您的完成分段上传的请求是否成功)之后,才会利用这些段创建对象。在收到完成分段上传请求后,Amazon S3 会将这些段汇集在一起并创建一个对象。

如果您未成功发送完成分段上传请求,则 Amazon S3 不会汇集这些段并且不会创建任何对象。 因此,这些段将保留在 Amazon S3 中,您需要为存储在 Amazon S3 中的段付费。作为最佳实践,我们建议您配置生命周期规则 (使用 AbortIncompleteMultipartUpload 操作) 以最大程度地降低存储成本。

Amazon S3 支持一个存储桶生命周期规则,您可以使用该规则指示 Amazon S3 中止未在启动后的指定天数内完成的分段上传。当分段上传未在规定的时限内完成时,便能够执行中止操作,Amazon S3 将中止分段上传 (并删除与分段上传相关的段)。

下面是使用 AbortIncompleteMultipartUpload 操作指定规则的示例生命周期配置。

<LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Prefix></Prefix> <Status>Enabled</Status> <AbortIncompleteMultipartUpload> <DaysAfterInitiation>7</DaysAfterInitiation> </AbortIncompleteMultipartUpload> </Rule> </LifecycleConfiguration>

在示例中,该规则没有为 Prefix 元素 (对象键名前缀) 指定值,因此该规则适用于启动了分段上传的存储桶中的所有对象。已启动但未在七天内完成的所有分段上传将能够执行中止操作 (该操作对已完成的分段上传没有影响)。

有关存储桶生命周期配置的更多信息,请参阅对象生命周期管理

注意

如果分段上传在规则中指定的天数内完成,则 AbortIncompleteMultipartUpload 生命周期操作不适用(即,Amazon S3 将不会执行任何操作)。此外,此操作不适用于对象,此生命周期操作不会删除任何对象。

以下 put-bucket-lifecycle CLI 命令将为指定的存储桶添加生命周期配置。

$ aws s3api put-bucket-lifecycle  \ --bucket bucketname  \ --lifecycle-configuration filename-containing-lifecycle-configuration

要测试 CLI 命令,请执行以下操作:

  1. 设置 AWS CLI。有关说明,请参阅 设置 AWS CLI

  2. 将以下示例生命周期配置保存在一个文件 (lifecycle.json) 中。该示例配置指定了空前缀,因此它适用于存储桶中的所有对象。您可以指定一个前缀以限制仅对一部分对象应用策略。

    { "Rules": [ { "ID": "Test Rule", "Status": "Enabled", "Prefix": "", "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 } } ] }
  3. 运行以下 CLI 命令以在存储桶上设置生命周期配置。

    aws s3api put-bucket-lifecycle   \ --bucket bucketname  \ --lifecycle-configuration file://lifecycle.json
  4. 要进行验证,请使用 get-bucket-lifecycle CLI 命令检索生命周期配置。

    aws s3api get-bucket-lifecycle  \ --bucket bucketname
  5. 要删除生命周期配置,请使用 delete-bucket-lifecycle CLI 命令。

    aws s3api delete-bucket-lifecycle \ --bucket bucketname