归档类型和冷归档类型的文件需要解冻后才能读取。本文介绍如何使用 OSS C++ SDK V2 解冻归档文件。
注意事项
-
运行示例代码前,请将代码中的
<region>替换为实际的地域,如cn-hangzhou。 -
本文示例代码使用环境变量获取访问凭证。
-
解冻归档文件需要拥有
oss:RestoreObject权限。 -
RestoreObject 仅适用于归档类型(Archive)和冷归档类型(ColdArchive)的文件。
重要
归档类型文件的解冻时间约为 1 分钟,冷归档类型文件的解冻时间根据数据大小和解冻优先级不同,取回时间也不同。解冻完成后,文件进入可读取状态。
示例代码
解冻归档文件
以下代码演示如何解冻归档类型的文件:
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
oss::models::RestoreRequest restoreReq;
restoreReq.days = 1;
restoreReq.jobParameters = oss::models::JobParameters().setTier("Standard");
auto outcome = client.restoreObject(
oss::models::RestoreObjectRequest()
.setBucket("examplebucket")
.setKey("exampleobject.txt")
.setRestoreRequest(restoreReq));
if (!outcome.has_value()) {
auto& e = outcome.error();
std::cerr << "解冻归档文件失败"
<< ", code: " << e.getCode()
<< ", message: " << e.getMessage()
<< ", requestId: " << e.getRequestId() << std::endl;
return 1;
}
auto& result = outcome.value();
std::cout << "解冻归档文件成功"
<< ", status: " << result.getStatusCode()
<< ", requestId: " << result.getRequestId() << std::endl;
return 0;
}
清除解冻状态
以下代码演示如何清除已解冻的归档文件的解冻状态,使其恢复为冻结状态:
#include <iostream>
#include "alibabacloud/oss2/ClientConfiguration.h"
#include "alibabacloud/oss2/OSSClient.h"
#include "alibabacloud/oss2/credentials/CredentialsProvider.h"
namespace oss = alibabacloud::oss2;
int main() {
auto conf = oss::ClientConfiguration::loadDefault();
conf.region = "<region>";
conf.credentialsProvider = std::make_shared<oss::EnvironmentVariableCredentialsProvider>();
oss::OSSClient client(conf);
auto outcome = client.cleanRestoredObject(
oss::models::CleanRestoredObjectRequest()
.setBucket("examplebucket")
.setKey("exampleobject.txt"));
if (!outcome.has_value()) {
auto& e = outcome.error();
std::cerr << "清除解冻状态失败"
<< ", code: " << e.getCode()
<< ", message: " << e.getMessage()
<< ", requestId: " << e.getRequestId() << std::endl;
return 1;
}
auto& result = outcome.value();
std::cout << "清除解冻状态成功"
<< ", status: " << result.getStatusCode()
<< ", requestId: " << result.getRequestId() << std::endl;
return 0;
}
相关文档
关于解冻归档文件的完整示例代码,请参见RestoreObject.cpp。
关于清除解冻状态的完整示例代码,请参见CleanRestoredObject.cpp。
该文章对您有帮助吗?