本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 S3CrtClient 执行 Amazon S3 操作
S3CrtClient 类在适用于 C++ 的 AWS SDK 的 1.9 版本中可用,它提高了向 Amazon S3 上传和从 Amazon S3 下载大型数据文件的吞吐量。有关此版本改进的更多信息,请参阅使用适用于 C++ 的 AWS SDK v1.9 提高 Amazon S3 吞吐量
S3CrtClient 构建于 AWS 通用运行时(CRT)库之上。
注意
为避免因上传不完整或部分上传而被收费,建议您对 Amazon S3 存储桶启用 AbortIncompleteMultipartUpload 生命周期规则。
该规则指示 Amazon S3 中止在启动后没有在指定天数内完成的分段上传。当超过设置的时间限制时,Amazon S3 将中止上传,然后删除未完成的上传数据。
有关更多信息,请参阅《Amazon S3 用户指南》中的在存储桶上设置生命周期配置。
先决条件
在开始之前,建议您先阅读开始使用适用于 C++ 的 AWS SDK。
下载示例代码并按代码示例入门中所述构建解决方案。
要运行这些示例,您的代码用于发出请求的用户配置文件必须在 AWS 中具有适当的权限(用于服务和操作)。有关更多信息,请参阅提供 AWS 凭证。
使用 S3CrtClient 上传和下载对象
此示例演示如何使用 S3CrtClient。该示例创建一个存储桶,上传一个对象,下载该对象,然后删除该文件和存储桶。PUT 操作会转化为分段上传。GET 操作会转化为多个“分范围”GET 请求。有关分段上传的更多信息,请参阅《Amazon S3 用户指南》中的使用分段上传来上传和复制对象。
在此示例中,提供的数据文件 ny.json 以分段上传的形式上传。这一点可以在程序成功运行后,通过查看调试日志来确认。
如果上传失败,底层 CRT 库中会发出 AbortMultipartUpload,以清理所有已上传的部分。但是,并非所有错误/故障都可以在内部处理(例如拔掉网线)。建议您在 Amazon S3 存储桶上创建生命周期规则,以确保部分上传的数据不会滞留在您的账户中(部分上传的数据仍然会产生费用)。有关如何设置生命周期规则,请参阅发现并删除未完成的分段上传以降低 Amazon S3 费用
使用调试日志浏览分段上传的详细信息
-
在
main()函数中,注意带有“TODO”注释的代码,这些注释提供了更新代码的说明。-
对于
file_name:从代码注释中提供的链接下载示例数据文件ny.json,或使用您自己的大型数据文件。 -
对于
region:使用枚举将region变量更新为您账户的 AWS 区域。要找到您的账户所在区域,请登录到AWS 管理控制台,然后在右上角找到该区域。
-
-
编译示例。
-
将变量
file_name指定的文件复制到您的可执行文件夹,然后运行s3-crt-demo可执行文件。 -
在您的可执行文件夹中,找到最新的
.log文件。 -
打开日志文件,选择搜索,然后输入
partNumber。 -
该日志包含类似以下内容的条目,其中为上传文件的每个部分指定了
partNumber和uploadId:PUT /my-object partNumber=1&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD以及
PUT /my-object partNumber=2&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD
请参阅 Github