創建桶
功能說明
您可以使用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("*"); // 可以使用//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,版本控制開關狀態 |