Anda harus memulihkan objek Archive atau Cold Archive sebelum dapat membacanya. Topik ini menjelaskan cara memulihkan objek Archive dan Cold Archive.
Catatan penggunaan
Hanya objek Archive dan Cold Archive yang mendukung metode RestoreObject.
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.
Untuk memulihkan objek, Anda harus memiliki izin
oss:RestoreObject. Untuk informasi selengkapnya, lihat Berikan kebijakan akses kustom kepada RAM user.
Memulihkan objek Archive
Kode berikut menunjukkan cara memulihkan objek Archive:
#include <alibabacloud/oss/OssClient.h>
#include <thread>
#include <chrono>
#include <algorithm>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tetapkan BucketName ke nama bucket Anda, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Tetapkan ObjectName ke path lengkap objek Archive. Path tersebut tidak mencakup nama bucket. */
std::string ObjectName = "yourObjectName";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Memulihkan objek Archive. */
auto outcome = client.RestoreObject(BucketName, ObjectName);
/* Objek yang tidak berada dalam kelas penyimpanan Archive tidak dapat dipulihkan. */
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "RestoreObject gagal, kode: " << outcome.error().Code() <<
", pesan: " << outcome.error().Message() <<
", requestId: " << outcome.error().RequestId() << std::endl;
return -1;
}
std::string onGoingRestore("ongoing-request=\"false\"");
int maxWaitTimeInSeconds = 600;
while (maxWaitTimeInSeconds > 0)
{
auto meta = client.HeadObject(BucketName, ObjectName);
std::string restoreStatus = meta.result().HttpMetaData()["x-oss-restore"];
std::transform(restoreStatus.begin(), restoreStatus.end(), restoreStatus.begin(), ::tolower);
if (!restoreStatus.empty() &&
restoreStatus.compare(0, onGoingRestore.size(), onGoingRestore)==0) {
std::cout << " berhasil, status pemulihan:" << restoreStatus << std::endl;
/* Objek Archive berhasil dipulihkan. */
break;
}
std::cout << " info, Waktu Tunggu:" << maxWaitTimeInSeconds
<< "; status pemulihan:" << restoreStatus << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(10));
maxWaitTimeInSeconds--;
}
if (maxWaitTimeInSeconds == 0)
{
std::cout << "RestoreObject gagal, TimeoutException" << std::endl;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Memulihkan objek Cold Archive
Kode berikut menunjukkan cara memulihkan objek Cold Archive:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tetapkan BucketName ke nama bucket Anda, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Tetapkan ObjectName ke path lengkap objek Cold Archive. Path tersebut tidak mencakup nama bucket. */
std::string ObjectName = "yourObjectName";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Untuk menentukan kelas penyimpanan sebagai Cold Archive saat mengunggah file, lihat kode berikut. */
//auto content = std::make_shared<std::stringstream>("test");
//PutObjectRequest putRequest(BucketName, ObjectName, content);
//putRequest.MetaData().addHeader("x-oss-storage-class", "ColdArchive");
//auto putOutcome = client.PutObject(putRequest);
RestoreObjectRequest request(BucketName, ObjectName);
/* Tetapkan jumlah hari objek tetap dalam keadaan dipulihkan. Nilai default adalah 1. */
request.setDays(2);
/* Tetapkan prioritas pemulihan untuk objek Cold Archive. TierType::Bulk menunjukkan bahwa pemulihan selesai dalam 5 hingga 12 jam. */
request.setTierType(TierType::Bulk);
auto outcome = client.RestoreObject(request);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "Hapus Inventaris Bucket gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Referensi
Untuk kode contoh lengkap yang menunjukkan cara memulihkan objek Archive dan Cold Archive, lihat contoh di GitHub.
Untuk informasi selengkapnya mengenai operasi API untuk memulihkan objek, lihat RestoreObject.