通过分段上传将文件上传到 Lightsail 存储桶 - Amazon Lightsail

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过分段上传将文件上传到 Lightsail 存储桶

通过分段上传,可将单个文件作为一组分段上传到存储桶。每个分段都是文件数据的连续部分。您可以独立上传以及按任意顺序上传这些文件分段。如果任意分段传输失败,可以重新传输该分段且不会影响其它分段。文件的所有部分都上传完毕后,Amazon S3 会汇编这些部分,然后在 Amazon Lightsail 的存储桶中创建对象。一般而言,如果您的对象大小达到了 100 MB,您应该考虑使用分段上传,而不是在单个操作中上传对象。有关存储桶的更多信息,请参阅对象存储

使用分段上传可提供以下优势:

  • 提高吞吐量 – 您可以并行上传分段以提高吞吐量。

  • 从任何网络问题中快速恢复 - 较小的分段大小可以将由于网络错误而需重启失败的上传所产生的影响降至最低。

  • 逐步上传 — 您可以在一段时间内逐步上传文件分段。启动分段上传后,您可以在 24 小时内完成分段上传。

  • 在您知道最终文件大小前开始上传 – 您可以在创建对象时将其上传。

我们建议您按以下方式使用分段上传:

  • 如果您在稳定的高带宽网络上传大文件,通过并行上传文件分段进行多线程上传,分段上传可以充分利用您的可用带宽。

  • 如果您在断点网络中上传对象,请使用分段上传以提高应对网络错误的复原能力,从而避免重新上传。在使用分段上传时,您只需重新尝试上传中断的分段即可。无需重头开始或重新上传整个文件。

内容

分段上传流程

分段上传是一个三步过程,它使用 Amazon S3 操作将文件上传到 Lightsail 中的存储桶:

  1. 您可以使用CreateMultipartUpload操作启动分段上传。

  2. 您可以使用UploadPart操作上传文件片段。

  3. 您可以使用CompleteMultipartUpload操作完成分段上传。

注意

在启动分段上传后,您可以使用AbortMultipartUpload操作停止分段上传。

分段上传请求完成后,Amazon Simple Storage Service 将根据上传的分段构建对象。然后,您可以按照访问存储桶中任何其他对象的方式访问该对象。

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

分段上传开始

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

分段上传

上传分段时,除了指定上传 ID,还必须指定分段编号。您可以选择 1 和 10000 之间的任意分段编号。分段编号在您正在上传的对象中唯一地识别分段及其位置。您选择的分段编号不必是连续序列(例如,它可以是 1、5 和 14)。如果您使用之前上传的分段的同一分段编号上传新分段,则之前上传的分段将被覆盖。

无论何时上传分段,Amazon Simple Storage Service 都将在其响应中返回 ETag 标头。对于每个分段上传,您必须记录分段编号和 ETag 值。您必须在随后的请求中包括这些值以完成分段上传。

注意

分段上传的所有上传分段都会存储在您的存储桶中。它们会占用存储桶的存储空间,直到您完成上传、停止上传或上传超时。有关更多信息,请参阅 分段上传保留本指南下文中的。

分段上传完成

完成分段上传后,Amazon Simple Storage Service 会根据分段编号按升序连接各分段,而从创建对象。如果在开始分段上传请求中提供了任何对象元数据,则 Amazon Simple Storage Service 会将该元数据与对象相关联。成功完成请求后,分段将不再存在。

完成分段上传请求必须包括上传 ID 以及分段编号和相应的 ETag 值的列表。Amazon Simple Storage Service 响应包括可唯一识别组合对象数据的 ETag。此 ETag 无需成为对象数据的 MD5 哈希。

您可以选择停止分段上传。停止分段上传后,无法再次使用该上传 ID 上传任何分段。然后,释放取消的分段上传的任何分段的所有存储空间。如果有任何分段上传正在进行,则即使在您停止后,它们仍然可能会成功或失败。要释放所有分段使用的所有存储,必须仅在完成所有分段的上传后才停止分段上传。

分段上传列表

您可以列出特定分段上传或所有正在进行的分段上传的分段。列出分段操作将返回您已为特定分段上传而上传的分段信息。对于每个列表分段请求,Amazon Simple Storage Service 将返回有关特定分段上传的分段信息,最多为 1000 个分段。如果分段上传中的分段超过 1000 个,您必须发送一系列列出分段请求以检索所有分段。请注意,返回的分段列表不包括仍在上传的分段。使用“列出分段上传”操作,您可以获得正在进行的分段上传的列表。

正在进行的分段上传是已开始但还未完成或停止的上传。每个请求将返回最多 1000 个分段上传。如果正在进行的分段上传超过 1000 个,您必须发送其他请求才能检索剩余的分段上传。仅使用返回的列表进行验证。发送“完成分段上传”请求时,请勿使用此列表的结果。相反,当上传分段和 Amazon Simple Storage Service 返回的相应 ETag 值时,请保留您自己的指定分段编号列表。

并发分段上传操作

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

注意

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

分段上传保留

分段上传的所有上传分段都会存储在您的存储桶中。它们会占用存储桶的存储空间,直到您完成上传、停止上传或上传超时。分段上传超时,分段上传将在创建后 24 小时后删除。若您停止分段上传或分段上传超时,所有上传的分段都将被删除,并释放它们在存储桶上占用的存储空间。

Amazon Simple Storage Service 分段上传限制

下表提供了分段上传的核心规范。

  • 最大对象大小:5 TB

  • 每次上传的最大分段数量:10000 个

  • 分段编号:1-10000(含)

  • 分段大小:5 MB(最小值)- 5 GB(最大值)。未对分段上传的最后一段施加大小限制。

  • “列出分段”请求返回的最大分段数量:1,000

  • “列出分段上传”请求返回的最大分段上传数量:1,000

拆分要上传的文件

在 Linux 或 Linux 操作系统中使用 split 命令可以将文件拆分为多个分段,然后将其上传到存储桶。您可以在 Windows 操作系统中使用类似的免费软件应用程序来拆分文件。将文件拆分为多个部分后,继续执行本指南的启动分段上传部分。

使用 AWS CLI启动分段上传

完成以下过程,以使用 AWS Command Line Interface (AWS CLI)启动分段上传。使用 create-multipart-upload 命令完成此操作。有关更多信息,请参阅《AWS CLI 命令参考create-multipart-upload中的。

注意

在 AWS CLI 继续执行此过程之前,您必须为 Lightsail 和 Amazon S3 安装并对其进行配置。有关更多信息,请参阅配置为与 Lightsail 配合使用。 AWS CLI

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以为存储桶创建分段上传。

    aws s3api create-multipart-upload --bucket BucketName --key ObjectKey --acl bucket-owner-full-control

    在该命令中,将以下示例文本替换为自己的文本:

    • BucketName-您要为其创建分段上传的存储桶的名称。

    • ObjectKey-用于要上传的文件的对象密钥。

    例如:

    aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --acl bucket-owner-full-control

    您应看到类似于以下示例的结果。响应包括一个 UploadID,您必须在随后的命令中指定,才能上传分段以及完成此对象的分段上传。

    create-multipart-upload 命令的结果

    在拥有分段上传的 UploadID 之后,请继续执行本指南的以下使用 AWS CLI上传分段部分,然后开始上传分段。

使用上传分段 AWS CLI

完成以下过程,以使用 AWS Command Line Interface (AWS CLI)上传分段上传的分段。使用 upload-part 命令完成此操作。有关更多信息,请参阅《AWS CLI Command Reference》中的 upload-part

注意

在 AWS CLI 继续执行此过程之前,您必须为 Lightsail 和 Amazon S3 安装并对其进行配置。有关更多信息,请参阅配置为与 Lightsail 配合使用。 AWS CLI

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以将分段上传到存储桶。

    aws s3api upload-part --bucket BucketName --key ObjectKey --part-number Number --body FilePart --upload-id "UploadID" --acl bucket-owner-full-control

    在该命令中,将以下示例文本替换为自己的文本:

    • BucketName-您要为其创建分段上传的存储桶的名称。

    • ObjectKey-用于要上传的文件的对象密钥。

    • Number - 您要上传的分段的分段编号。分段编号在您正在上传的对象中唯一地识别分段及其位置。请确保每次上传分段时,以递增方式增加 --part-number 参数。为此,请按照完成分段上传时 Amazon Simple Storage Service 组装对象的顺序来对其进行编号。

    • FilePart-要从您的计算机上传的零件文件。

    • UploadID - 您之前在本指南中创建的分段上传的上传 ID。

    例如:

    aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --part-number 1 --body sailbot.mp4.001 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG" --acl bucket-owner-full-control

    您应看到类似于以下示例的结果。对每个上传的分段重复 upload-part 命令。每个上传分段请求的响应将包括已上传分段的 ETag 值。记录您上传的每个分段的 ETag 值。您将需要所有的 ETag 值来完成分段上传,之后这将在本指南中进行介绍。

    upload-part 命令的结果

使用 Amazon CLI 列出分段上传的分段

完成以下过程,以使用 AWS Command Line Interface (AWS CLI)列出分段上传的分段。使用 list-parts 命令完成此操作。有关更多信息,请参阅《AWS CLI Command Reference》中的 list-parts

完成此过程以获取分段上传中所有已上传分段的 ETag 值。您将需要这些值来完成分段上传,之后这将在本指南中进行介绍。但是,如果您记录了分段上传响应中的 ETag 值,则可以跳过此过程并继续执行本指南的创建分段上传 .json 文件部分。

注意

在 AWS CLI 继续执行此过程之前,您必须为 Lightsail 和 Amazon S3 安装并对其进行配置。有关更多信息,请参阅配置为与 Lightsail 配合使用。 AWS CLI

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以列出存储桶中分段上传的分段。

    aws s3api list-parts --bucket BucketName --key ObjectKey --upload-id "UploadID"

    在该命令中,将以下示例文本替换为自己的文本:

    • BucketName-您要列出分段上传的各个部分的存储桶的名称。

    • ObjectKey-分段上传的对象密钥。

    • UploadID - 您之前在本指南中创建的分段上传的上传 ID。

    例如:

    aws s3api list-parts --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG"

    您应看到类似于以下示例的结果。响应列出了所有分段编号和您在分段上传中上传的分段的 ETag 值。将这些值复制到剪贴板,然后继续执行本指南的创建分段上传 .json 部分。

    list-parts 命令的结果

创建分段上传 .json 文件

完成以下步骤以创建分段上传 .json 文件,该文件定义您上传的所有分段及其 ETag 值。之后在本指南中需要该文件才能完成分段上传。

  1. 打开文本编辑器, 将在本指南的上一部分中请求的 list-parts 命令的响应粘贴在其中。

    结果应该类似以下示例。

    分段上传 JSON 文件编号 1
  2. 重新格式化文本文件,如以下示例所示:

    分段上传 JSON 文件编号 2
  3. 将文本文件作为 mpstructure.json 保存到计算机,然后继续执行本指南的使用 Amazon CLI 完成分段上传部分。

使用 Amazon CLI 完成分段上传

完成以下过程,以使用 AWS Command Line Interface (AWS CLI)完成分段上传。使用 complete-multipart-upload 命令完成此操作。有关更多信息,请参阅《AWS CLI 命令参考complete-multipart-upload中的。

注意

在 AWS CLI 继续执行此过程之前,您必须为 Lightsail 和 Amazon S3 安装并对其进行配置。有关更多信息,请参阅配置为与 Lightsail 配合使用。 AWS CLI

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以将分段上传到存储桶。

    aws s3api complete-multipart-upload --multipart-upload file://JSONFileName --bucket BucketName --key ObjectKey --upload-id "UploadID" --acl bucket-owner-full-control

    在该命令中,将以下示例文本替换为自己的文本:

    • JSON FileName-您在本指南前面部分创建的.json 文件的名称(例如mpstructure.json)。

    • BucketName-您要为其完成分段上传的存储桶的名称。

    • ObjectKey-分段上传的对象密钥。

    • UploadID - 您之前在本指南中创建的分段上传的上传 ID。

    aws s3api complete-multipart-upload --multipart-upload file://mpstructure.json --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG" --acl bucket-owner-full-control

    您应看到类似于以下示例的响应。这确认分段上传已完成。现在,可在存储桶中组装并提供该对象。

    complete-multipart-upload 命令的结果

使用 Amazon CLI 列出存储桶分段上传

完成以下过程,以使用 AWS Command Line Interface (AWS CLI)列出存储桶所有的分段上传。使用 list-multipart-uploads 命令完成此操作。有关更多信息,请参阅《AWS CLI 命令参考list-multipart-uploads中的。

注意

在 AWS CLI 继续执行此过程之前,您必须为 Lightsail 和 Amazon S3 安装并对其进行配置。有关更多信息,请参阅配置为与 Lightsail 配合使用。 AWS CLI

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以将分段上传到存储桶。

    aws s3api list-multipart-uploads --bucket BucketName

    在命令中,BucketName替换为要列出其所有分段上传的存储桶的名称。

    例如:

    aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET

    您应看到类似于以下示例的响应。

    list-multipart-uploads 命令的结果

使用 Amazon CLI 停止分段上传

使用 AWS Command Line Interface (AWS CLI) 完成以下步骤以停止分段上传。如果您已开始分段上传但不想继续上传,则可以执行此操作。使用 abort-multipart-upload 命令完成此操作。有关更多信息,请参阅《AWS CLI 命令参考abort-multipart-upload中的。

注意

在 AWS CLI 继续执行此过程之前,您必须为 Lightsail 和 Amazon S3 安装并对其进行配置。有关更多信息,请参阅配置为与 Lightsail 配合使用。 AWS CLI

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以将分段上传到存储桶。

    aws s3api abort-multipart-upload --bucket BucketName --key ObjectKey --upload-id "UploadID" --acl bucket-owner-full-control

    在该命令中,将以下示例文本替换为自己的文本:

    • BucketName-您要停止分段上传的存储桶的名称。

    • ObjectKey-分段上传的对象密钥。

    • UploadID - 要停止的分段上传的上传 ID。

    例如:

    aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG" --acl bucket-owner-full-control

    此命令不会返回响应。您可以运行 list-multipart-uploads 命令以确认分段上传已停止。