本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建、列出和删除存储桶
Amazon Simple Storage Service(Amazon S3)中的每个对象或文件都包含在一个存储桶中,该存储桶代表一个对象文件夹。每个存储桶都有一个在 AWS 内全局唯一的名称。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的使用 Amazon S3 存储桶。
先决条件
在开始之前,建议您先阅读开始使用适用于 C++ 的 AWS SDK。
下载示例代码并按代码示例入门中所述构建解决方案。
要运行这些示例,您的代码用于发出请求的用户配置文件必须在 AWS 中具有适当的权限(用于服务和操作)。有关更多信息,请参阅提供 AWS 凭证。
列出存储桶
要运行 list_buckets 示例,请在命令提示符下,导航至构建系统生成可执行文件的文件夹。运行可执行文件,例如 run_list_buckets(完整的可执行文件名因操作系统而异)。输出会列出您账户的存储桶(如果有),如果您没有任何存储桶,则会显示一个空列表。
list_buckets.cpp 中有两种方法:
-
main()调用ListBuckets()。 -
ListBuckets()使用 SDK 查询您的存储桶。
S3Client 对象会调用 SDK 的 ListBuckets() 方法。如果成功,该方法将返回一个包含 ListBucketResult 对象的 ListBucketOutcome 对象。ListBucketResult 对象会调用 GetBuckets() 方法以获取包含您账户中每个 Amazon S3 存储桶信息的 Bucket 对象列表。
代码
bool AwsDoc::S3::listBuckets(const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client client(clientConfig); auto outcome = client.ListBuckets(); bool result = true; if (!outcome.IsSuccess()) { std::cerr << "Failed with error: " << outcome.GetError() << std::endl; result = false; } else { std::cout << "Found " << outcome.GetResult().GetBuckets().size() << " buckets\n"; for (auto &&b: outcome.GetResult().GetBuckets()) { std::cout << b.GetName() << std::endl; } } return result; }
请参阅 Github 上的完整 list_buckets 示例
创建存储桶
要运行 create_bucket 示例,请在命令提示符下,导航至构建系统生成可执行文件的文件夹。运行可执行文件,例如 run_create_bucket(完整的可执行文件名因操作系统而异)。该代码会在您的账户下创建一个空存储桶,然后显示请求成功还是失败。
create_bucket.cpp 中有两种方法:
-
main()调用CreateBucket()。在main()中,您需要使用enum将 AWS 区域 更改为账户所在区域。您可以登录AWS 管理控制台查看账户所在区域,然后在右上角找到该区域。 -
CreateBucket()使用 SDK 创建存储桶。
S3Client 对象调用 SDK 的 CreateBucket() 方法,传入带有存储桶名称的 CreateBucketRequest。默认情况下,存储桶在 us-east-1(弗吉尼亚州北部)区域创建。如果您的区域不是 us-east-1,则代码会设置存储桶约束,以确保在您所在地区创建存储桶。
代码
bool AwsDoc::S3::createBucket(const Aws::String &bucketName, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client client(clientConfig); Aws::S3::Model::CreateBucketRequest request; request.SetBucket(bucketName); if (clientConfig.region != "us-east-1") { Aws::S3::Model::CreateBucketConfiguration createBucketConfig; createBucketConfig.SetLocationConstraint( Aws::S3::Model::BucketLocationConstraintMapper::GetBucketLocationConstraintForName( clientConfig.region)); request.SetCreateBucketConfiguration(createBucketConfig); } Aws::S3::Model::CreateBucketOutcome outcome = client.CreateBucket(request); if (!outcome.IsSuccess()) { auto err = outcome.GetError(); std::cerr << "Error: createBucket: " << err.GetExceptionName() << ": " << err.GetMessage() << std::endl; } else { std::cout << "Created bucket " << bucketName << " in the specified AWS Region." << std::endl; } return outcome.IsSuccess(); }
请参阅 Github 上的完整 create_buckets 示例
删除存储桶
要运行 delete_bucket 示例,请在命令提示符下,导航至构建系统生成可执行文件的文件夹。运行可执行文件,例如 run_delete_bucket(完整的可执行文件名因操作系统而异)。此代码会删除您账户中指定的存储桶,然后显示请求成功还是失败。
在 delete_bucket.cpp 中,有两种方法。
-
main()调用DeleteBucket()。在main()中,您需要使用enum将 AWS 区域 更改为账户所在区域。您还需要将bucket_name更改为要删除的存储桶的名称。 -
DeleteBucket()使用 SDK 删除存储桶。
S3Client 对象使用 SDK 的 DeleteBucket() 方法,并传入一个带有要删除的存储桶名称的 DeleteBucketRequest 对象。存储桶必须为空才能成功。
代码
bool AwsDoc::S3::deleteBucket(const Aws::String &bucketName, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client client(clientConfig); Aws::S3::Model::DeleteBucketRequest request; request.SetBucket(bucketName); Aws::S3::Model::DeleteBucketOutcome outcome = client.DeleteBucket(request); if (!outcome.IsSuccess()) { const Aws::S3::S3Error &err = outcome.GetError(); std::cerr << "Error: deleteBucket: " << err.GetExceptionName() << ": " << err.GetMessage() << std::endl; } else { std::cout << "The bucket was deleted" << std::endl; } return outcome.IsSuccess(); }
请参阅 Github 上的完整 delete_bucket 示例