创建桶
功能说明
您可以使用CreateBucket方法创建存储桶。
代码示例
bool S3Demo::CreateBucket()
{
const Aws::String bucket_name = "<your-bucket-name>";
Aws::S3::Model::CreateBucketRequest request;
request.SetBucket(bucket_name);
Aws::S3::Model::CreateBucketOutcome outcome = s3_client->CreateBucket(request);
if (outcome.IsSuccess()) {
std::cout << "CreateBucket " << bucket_name << " success";
return true;
}
else {
std::cout << "Error: CreateBucket: " << outcome.GetError().GetMessage() << std::endl;
return false;
}
}请求参数
| 参数名 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| bucket | string | 桶名称 | 是 |
获取桶列表
功能说明
您可以使用ListBuckets接口获取桶列表。
代码示例
bool S3Demo::ListBuckets()
{
Aws::S3::Model::ListBucketsOutcome outcome = s3_client->ListBuckets();
if (outcome.IsSuccess()) {
std::cout << "Bucket names:" << std::endl << std::endl;
Aws::Vector<Aws::S3::Model::Bucket> buckets =
outcome.GetResult().GetBuckets();
for (Aws::S3::Model::Bucket& bucket : buckets) {
std::cout << bucket.GetName() << std::endl;
}
return true;
}
else {
std::cout << "Error: ListBuckets: " << outcome.GetError().GetMessage() << std::endl;
return false;
}
}请求参数
无
返回结果
| 参数 | 类型 | 说明 |
|---|---|---|
| Buckets | Bucket数组 | 桶列表 |
判断桶是否存在
功能说明
您可以使用HeadBucket接口判断桶是否存在。
代码示例
bool S3Demo::HeadBucket()
{
Aws::S3::Model::HeadBucketRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::HeadBucketOutcome outcome = s3_client->HeadBucket(request);
if (outcome.IsSuccess()) {
std::cout << "HeadBucket success";
return true;
} else {
std::cout << "Error: HeadBucket: " << outcome.GetError().GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
删除桶
功能说明
您可以使用DeleteBucket删除存储桶。
代码示例
bool S3Demo::DeleteBucket()
{
const Aws::String bucket_name = "<your-bucket-name>";
Aws::S3::Model::DeleteBucketRequest request;
request.SetBucket(bucket_name);
Aws::S3::Model::DeleteBucketOutcome outcome = s3_client->DeleteBucket(request);
if (outcome.IsSuccess()) {
std::cout << "DeleteBucket " << bucket_name << " success";
return true;
}
else {
std::cout << "Error: DeleteBucket: " << outcome.GetError().GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
在删除桶前,必须先确保桶为空,否则会出现如下错误:BucketNotEmpty - Unable to parse ExceptionName: BucketNotEmpty Message。
设置桶访问权限
功能说明
媒体存储支持一组预先定义的授权,称为Canned ACL。每个Canned ACL都有一组预定义的被授权者和权限,下表列出了相关的预定义授权含义。
| ACL | 权限 | 描述 |
|---|---|---|
| private | 私有读写 | 存储桶拥有者有读写权限,其他用户没有访问权限。 |
| public-read | 公共读私有写 | 存储桶拥有者有读写权限,其他用户只有该存储桶的读权限。 |
| public-read-write | 公共读写 | 所有用户都有该存储桶的读写权限。 |
| authenticated-read | 注册用户可读 | 存储桶拥有者有读写权限,注册用户具有该存储桶的读权限。 |
您可以通过PutBucketAcl接口设置一个存储桶的访问权限。用户在设置存储桶的ACL之前需要具备WRITE_ACP 权限。
代码示例
bool S3Demo::PutBucketAcl()
{
Aws::S3::Model::PutBucketAclRequest request;
request.SetBucket("<your-bucket-name>");
request.SetACL(Aws::S3::Model::BucketCannedACL::private_);
Aws::S3::Model::PutBucketAclOutcome outcome = s3_client->PutBucketAcl(request);
if (outcome.IsSuccess()) {
std::cout << "PutBucketAcl success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: PutBucketAcl: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
| ACL | BucketCannedACL | acl值 | 是 |
获取桶访问权限
功能说明
您可以通过GetBucketAcl接口获取存储桶的access control list(ACL)信息。存储桶的ACL可以在创建的时候设置并且通过API查看,用户需要具有READ_ACP(读取存储桶 ACL信息)权限才可以查询存储桶的ACL信息。
代码示例
bool S3Demo::GetBucketAcl()
{
Aws::S3::Model::GetBucketAclRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::GetBucketAclOutcome outcome = s3_client->GetBucketAcl(request);
if (outcome.IsSuccess()) {
Aws::Vector<Aws::S3::Model::Grant> grants = outcome.GetResult().GetGrants();
for (Aws::S3::Model::Grant& grant : grants)
{
std::cout << "Grant:" << grant.GetGrantee().GetDisplayName() << ", permission:" << (int)grant.GetPermission() << std::endl;
}
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: GetBucketAcl: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
返回结果
| 参数 | 类型 | 说明 |
|---|---|---|
| Owner | Owner | 所有者信息 |
| Grants | Grants | 每种类型用户的详细权限信息 |
设置桶策略
功能说明
存储桶授权策略(bukcet policy)可以灵活地配置用户各种操作和访问资源的权限。访问控制列表(access control lists,ACL)只能对单一对象设置权限,而存储桶授权策略可以基于各种条件对一个桶内的全部或者一组对象配置权限。桶的拥有者拥有PutBucketPolicy操作的权限,如果桶已经被设置了policy,则新的policy会覆盖原有的policy。您可以通过PutBucketPolicy接口设置桶策略,描述桶策略的信息以JSON格式的字符串形式通过Policy参数传入。一个policy的示例如下:
{
"Id": "<your-policy-id>",
"Version": "2012-10-17",
"Statement" : [{
"Sid": "<your-statement-id>",
"Principal": {
"AWS":["arn:aws:iam:::user/<your-user-name>"]
},
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:CreateBucket"
],
"Resource": [
"arn:aws:iam:::<your-bucket-name>/*"
],
"Condition": "<some-conditions>"
}]
}Statement的内容说明如下:
| 元素 | 描述 | 是否必要 |
|---|---|---|
| Sid | statement Id,可选关键字,描述statement的字符串 | 否 |
| Principal | 可选关键字,被授权人,指定本条statement权限针对的Domain以及User,支持通配符“*”,表示所有用户(匿名用户)。当对Domain下所有用户授权时,Principal格式为arn:aws:iam:::user/*。当对某个User进行授权时,Principal格式为arn:aws:iam:::user/<your-user-name> | 可选,Principal与NotPrincipal选其一 |
| NotPrincipal | 可选关键字,不被授权人,statement匹配除此之外的其他人。取值同Principal | 可选,NotPrincipal与Principal选其一 |
| Action | 可选关键字,指定本条statement作用的操作,Action字段为媒体存储支持的所有操作集合,以字符串形式表示,不区分大小写。支持通配符“*”,表示该资源能进行的所有操作。例如:"Action":["s3:List*", "s3:Get*"] | 可选,Action与NotAction选其一 |
| NotAction | 可选关键字,指定一组操作,statement匹配除该组操作之外的其他操作。 取值同Action | 可选,NotAction与Action选其一 |
| Effect | 必选关键字,指定本条statement的权限是允许还是拒绝,Effect的值必须为Allow或者Deny | 必选 |
| Resource | 可选关键字,指定statement起作用的一组资源,支持通配符“*”,表示所有资源 | 可选,Resource与NotResource选其一 |
| NotResource | 可选关键字,指定一组资源,statement匹配除该组资源之外的其他资源。 取值同Resource | 可选,NotResource与Resource选其一 |
| Condition | 可选关键字,本条statement生效的条件 | 可选 |
代码示例
bool S3Demo::PutBucketPolicy()
{
Aws::String policyBody = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"1\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::<bucket-name>/*\"]}]}";
std::shared_ptr<Aws::StringStream> request_body =
Aws::MakeShared<Aws::StringStream>("");
*request_body << policyBody;
Aws::S3::Model::PutBucketPolicyRequest request;
request.SetBucket("<your-bucket-name>");
request.SetBody(request_body);
Aws::S3::Model::PutBucketPolicyOutcome outcome = s3_client->PutBucketPolicy(request);
if (outcome.IsSuccess()) {
std::cout << "PutBucketPolicy success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: PutBucketPolicy: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
| policyBody | string | 策略内容,json字符串 | 是 |
获取桶策略
功能说明
您可以通过GetBucketPolicy接口获取指定存储桶的授权策略。如果您使用的身份不是该存储桶的拥有者,则调用身份必须对指定存储桶具有GetBucketPolicy权限,且属于该存储桶所有者的账户。如果您没有GetBucketPolicy权限,方法将返回403 Access Denied错误。如果您具有正确的权限,但您没有使用属于存储桶所有者账户的身份,则返回405 Method Not Allowed错误。
代码示例
bool S3Demo::GetBucketPolicy()
{
Aws::S3::Model::GetBucketPolicyRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::GetBucketPolicyOutcome outcome = s3_client->GetBucketPolicy(request);
if (outcome.IsSuccess()) {
Aws::String line;
outcome.GetResult().GetPolicy() >> line;
std::cout << "GetBucketPolicy success " << line;
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: GetBucketPolicy: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
返回结果
| 参数 | 类型 | 说明 |
|---|---|---|
| Policy | IOStream | 策略内容,json字符串 |
删除桶策略
功能说明
您可以通过DeleteBucketPolicy接口删除指定存储桶的授权策略。如果您使用的身份不是该存储桶的拥有者,则调用身份必须对指定存储桶具有DeleteBucketPolicy权限,且属于该存储桶所有者的帐户。
如果您没有DeleteBucketPolicy权限,方法将返回403 Access Denied错误。如果您具有正确的权限,但您没有使用属于存储桶所有者账户的身份,则返回405 Method Not Allowed错误。
代码示例
bool S3Demo::DeleteBucketPolicy()
{
Aws::S3::Model::DeleteBucketPolicyRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::DeleteBucketPolicyOutcome outcome = s3_client->DeleteBucketPolicy(request);
if (outcome.IsSuccess()) {
std::cout << "DeleteBucketPolicy success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: DeleteBucketPolicy: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}
请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
设置桶生命周期配置
功能说明
生命周期管理可以通过设置规则实现自动清理过期的对象,优化存储空间。您可以使用PutBucketLifecycleConfiguration接口设置桶的生命周期配置,配置规则可以通过匹配对象key前缀、标签的方法设置当前版本或者历史版本对象的过期时间,对象过期后会被自动删除。
代码示例
bool S3Demo::PutBucketLifecycleConfiguration()
{
Aws::S3::Model::PutBucketLifecycleConfigurationRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::BucketLifecycleConfiguration config;
Aws::S3::Model::LifecycleRule rule;
rule.SetExpiration(Aws::S3::Model::LifecycleExpiration().WithDays(100));
rule.SetID("123");
rule.SetStatus(Aws::S3::Model::ExpirationStatus::Enabled);
rule.SetFilter(Aws::S3::Model::LifecycleRuleFilter().WithPrefix(""));
config.AddRules(rule);
request.SetLifecycleConfiguration(config);
Aws::S3::Model::PutBucketLifecycleConfigurationOutcome outcome = s3_client->PutBucketLifecycleConfiguration(request);
if (outcome.IsSuccess()) {
std::cout << "PutBucketLifecycleConfiguration success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: PutBucketLifecycleConfiguration: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
| LifecycleConfiguration | BucketLifecycleConfiguration | 封装了生命周期规则的数组,最多包含1000条规则 | 是 |
关于生命周期规则Rule一些说明
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| ID | string | 规则ID | 否 |
| Status | ExpirationStatus | 是否启用规则 (Enabled|Disabled) | 是 |
| Expiration | LifecycleExpiration | 文件过期时间 | 否 |
| AbortIncompleteMultipartUpload | AbortIncompleteMultipartUpload | 未完成上传的分片过期时间 | 否 |
| Transitions | Vector<Transition> | 文件转换到低频存储规则(距离修改时间) | 否 |
| Filter | LifecycleRuleFilter | 应用范围,可以指定前缀或对象标签 | 否 |
关于Expiration的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| Days | int | 过期天数 |
关于AbortIncompleteMultipartUpload的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| DaysAfterInitiation | int | 过期天数 |
关于Transition的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| Days | int | 转换过期天数 |
| StorageClass | TransitionStorageClass | 要转换的存储类型 |
关于Filter的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| Prefix | string | 需要过滤的前缀 |
获取桶生命周期配置
功能说明
您可以使用GetBucketLifecycleConfiguration接口获取桶的生命周期配置。
代码示例
bool S3Demo::GetBucketLifecycleConfiguration()
{
Aws::S3::Model::GetBucketLifecycleConfigurationRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::GetBucketLifecycleConfigurationOutcome outcome = s3_client->GetBucketLifecycleConfiguration(request);
if (outcome.IsSuccess()) {
Aws::Vector<Aws::S3::Model::LifecycleRule> rules = outcome.GetResult().GetRules();
for (Aws::S3::Model::LifecycleRule& rule : rules) {
std::cout << rule.GetExpiration().GetDays() << std::endl;
}
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: GetBucketLifecycleConfiguration: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
返回参数
| 参数 | 类型 | 说明 |
|---|---|---|
| Rules | Vector<LifecycleRule> | 一个描述生命周期管理的规则数组,一条规则包含了规则ID、匹配的对象key前缀、匹配的对象标签信息、当前版本对象过期时间、历史版本对象过期时间和是否生效标识等信息 |
关于生命周期规则Rule一些说明
| 参数 | 类型 | 说明 |
|---|---|---|
| ID | string | 规则ID |
| Status | ExpirationStatus | 是否启用规则 (Enabled|Disabled) |
| Expiration | LifecycleExpiration | 文件过期时间 |
| AbortIncompleteMultipartUpload | AbortIncompleteMultipartUpload | 未完成上传的分片过期时间 |
| Transitions | Vector<Transition> | 文件转换到低频存储规则(距离修改时间) |
| Filter | LifecycleRuleFilter | 应用范围,可以指定前缀或对象标签 |
关于Expiration的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| Days | int | 过期天数 |
关于AbortIncompleteMultipartUpload的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| DaysAfterInitiation | int | 过期天数 |
关于Transition的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| Days | int | 转换过期天数 |
| StorageClass | TransitionStorageClass | 要转换的存储类型 |
关于Filter的说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| Prefix | string | 需要过滤的前缀 |
删除桶生命周期配置
功能说明
您可以使用DeleteBucketLifecycle接口删除桶的生命周期配置。
代码示例
bool S3Demo::DeleteBucketLifecycle()
{
Aws::S3::Model::DeleteBucketLifecycleRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::DeleteBucketLifecycleOutcome outcome = s3_client->DeleteBucketLifecycle(request);
if (outcome.IsSuccess()) {
std::cout << "DeleteBucketLifecycle success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: DeleteBucketLifecycle: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
设置桶跨域访问配置
功能说明
跨域资源共享 (CORS) 定义了在一个域中加载的客户端 Web 应用程序与另一个域中的资源交互的方式。利用 CORS 支持,您可以构建丰富的客户端 Web 应用程序,同时可以选择性地允许跨源访问您的资源。您可以通过PutBucketCors接口设置桶的跨域访问配置。
代码示例
bool S3Demo::PutBucketCors()
{
Aws::S3::Model::PutBucketCorsRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::CORSConfiguration config;
Aws::S3::Model::CORSRule rule;
rule.AddAllowedMethods("PUT");
rule.AddAllowedMethods("GET");
rule.AddAllowedMethods("HEAD");
rule.AddAllowedMethods("POST");
rule.AddAllowedMethods("DELETE");
rule.AddAllowedHeaders("*");
rule.AddAllowedOrigins("*"); // 可以使用http://domain:port
rule.AddExposeHeaders("ETag");
rule.SetMaxAgeSeconds(3600);
config.AddCORSRules(rule);
request.SetCORSConfiguration(config);
Aws::S3::Model::PutBucketCorsOutcome outcome = s3_client->PutBucketCors(request);
if (outcome.IsSuccess()) {
std::cout << "PutBucketCors success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: PutBucketCors: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
| CORSConfiguration | CORSConfiguration | 跨域访问规则数组 | 是 |
关于CORSRule一些说明
| 参数 | 说明 |
|---|---|
| AllowedMethods | 允许的请求方法 |
| AllowedOrigins | 允许的请求源 |
| AllowedHeaders | 允许的请求头 |
| ExposedHeaders | 允许返回的Response Header |
| MaxAgeSeconds | 跨域请求结果的缓存时间 |
获取桶跨域访问配置
功能说明
跨域资源共享 (CORS) 定义了在一个域中加载的客户端 Web 应用程序与另一个域中的资源交互的方式。利用 CORS 支持,您可以构建丰富的客户端 Web 应用程序,同时可以选择性地允许跨源访问您的资源。您可以通过GetBucketCors接口获取桶跨域访问配置。
代码示例
bool S3Demo::GetBucketCors()
{
Aws::S3::Model::GetBucketCorsRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::GetBucketCorsOutcome outcome = s3_client->GetBucketCors(request);
if (outcome.IsSuccess()) {
Aws::Vector<Aws::S3::Model::CORSRule> rules = outcome.GetResult().GetCORSRules();
for (Aws::S3::Model::CORSRule& rule : rules) {
std::cout << rule.GetMaxAgeSeconds() << std::endl;
}
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: GetBucketCors: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
返回结果
| 参数 | 类型 | 说明 |
|---|---|---|
| CORSRules | Vector<CORSRule> | 跨域访问规则数组 |
关于CORSRule一些说明
| 参数 | 说明 |
|---|---|
| AllowedMethods | 允许的请求方法 |
| AllowedOrigins | 允许的请求源 |
| AllowedHeaders | 允许的请求头 |
| ExposedHeaders | 允许返回的Response Header |
| MaxAgeSeconds | 跨域请求结果的缓存时间 |
删除桶跨域访问配置
功能说明
跨域资源共享 (CORS) 定义了在一个域中加载的客户端 Web 应用程序与另一个域中的资源交互的方式。利用 CORS 支持,您可以构建丰富的客户端 Web 应用程序,同时可以选择性地允许跨源访问您的资源。您可以通过DeleteBucketCors接口删除桶跨域访问配置。
代码示例
bool S3Demo::DeleteBucketCors()
{
Aws::S3::Model::DeleteBucketCorsRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::DeleteBucketCorsOutcome outcome = s3_client->DeleteBucketCors(request);
if (outcome.IsSuccess()) {
std::cout << "DeleteBucketCors success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: DeleteBucketCors: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
设置桶版本控制状态
功能说明
通过媒体存储提供的版本控制,您可以在一个桶中保留多个对象版本。例如,image.jpg(版本1)和image.jpg(版本2)。如果您希望防止自己意外覆盖和删除版本,或存档对象,以便您可以检索早期版本的对象,您可以开启版本控制功能。
您必须在您的存储桶上显式启用版本控制。默认情况下,版本控制处于禁用状态。无论您是否已启用版本控制,您的存储桶中的每个对象都具有版本 ID。如果未启用版本控制,则版本 ID 值被设置为空。如果已启用版本控制,则对象会被指定唯一版本 ID 值。在存储桶上启用版本控制时,该存储桶中的现有对象(如果有)不会发生更改:版本ID(空)、内容和权限保持为相同。
在开启版本控制功能后,上传同名对象将不再删除旧对象,而是添加一个新的对象。普通的删除操作也不会将对象彻底删除,而是添加一个 Delete Marker 作为标识。容器开启版本控制功能之后,无法再关闭该功能,只能暂停。您可以使用 PutBucketVersioning接口开启和暂停版本控制。
代码示例
以下代码展示如何开启版本控制
bool S3Demo::PutBucketVersioning()
{
Aws::S3::Model::VersioningConfiguration config;
config.SetStatus(Aws::S3::Model::BucketVersioningStatus::Enabled);
Aws::S3::Model::PutBucketVersioningRequest request;
request.SetBucket("<your-bucket-name>");
request.SetVersioningConfiguration(config);
Aws::S3::Model::PutBucketVersioningOutcome outcome = s3_client->PutBucketVersioning(request);
if (outcome.IsSuccess()) {
std::cout << "PutBucketVersioning success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: PutBPutBucketVersioningucketAcl: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}以下代码展示如何暂停版本控制
bool S3Demo::PutBucketVersioning()
{
Aws::S3::Model::VersioningConfiguration config;
config.SetStatus(Aws::S3::Model::BucketVersioningStatus::Suspended);
Aws::S3::Model::PutBucketVersioningRequest request;
request.SetBucket("<your-bucket-name>");
request.SetVersioningConfiguration(config);
Aws::S3::Model::PutBucketVersioningOutcome outcome = s3_client->PutBucketVersioning(request);
if (outcome.IsSuccess()) {
std::cout << "PutBucketVersioning success";
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: PutBPutBucketVersioningucketAcl: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 存储桶的名称 | 是 |
| VersioningConfiguration | VersioningConfiguration | 封装了设置版本控制状态的参数 | 是 |
VersioningConfiguration说明
| 参数 | 类型 | 说明 |
|---|---|---|
| Status | BucketVersioningStatus | Enabled|Suspended,版本控制开关状态 |
获取桶版本控制状态
功能说明
您可以使用 GetBucketVersioning接口获取版本控制状态。
代码示例
bool S3Demo::GetBucketVersioning()
{
Aws::S3::Model::GetBucketVersioningRequest request;
request.SetBucket("<your-bucket-name>");
Aws::S3::Model::GetBucketVersioningOutcome outcome = s3_client->GetBucketVersioning(request);
if (outcome.IsSuccess()) {
auto status = outcome.GetResult().GetStatus();
std::cout << "status:" << (int)status << std::endl;
return true;
} else
{
Aws::S3::S3Error err = outcome.GetError();
std::cout << "Error: GetBucketVersioning: " << (int)err.GetResponseCode() << ", Message:" <<
err.GetMessage() << std::endl;
return false;
}
}请求参数
| 参数 | 类型 | 说明 | 是否必要 |
|---|---|---|---|
| Bucket | string | 桶名称 | 是 |
返回结果
| 参数 | 类型 | 说明 |
|---|---|---|
| Status | BucketVersioningStatus | Enabled|Suspended,版本控制开关状态 |