Anda harus memulihkan objek Archive atau Cold Archive sebelum dapat membacanya. Topik ini menjelaskan cara memulihkan objek tersebut.
Catatan penggunaan
Metode RestoreObject hanya dapat dipanggil untuk objek Archive dan Cold Archive.
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Initialization.
Untuk memulihkan objek, Anda harus memiliki izin
oss:RestoreObject. Untuk informasi selengkapnya, lihat Attach a custom policy to a RAM user.
Memulihkan objek Archive
Kode berikut menunjukkan cara memulihkan objek Archive:
using Aliyun.OSS;
using Aliyun.OSS.Model;
using Aliyun.OSS.Model;
using System.Net;
using System.Text;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket.
var bucketName = "examplebucket";
// Tentukan path lengkap objek Archive. Path tidak boleh mengandung nama bucket.
var objectName = "yourObjectName";
// Tentukan konten objek.
var objectContent = "More than just cloud.";
int maxWaitTimeInSeconds = 600;
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan.
var conf = new ClientConfiguration();
// Atur versi signature ke V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// Buat bucket Archive.
var bucket = client.CreateBucket(bucketName, StorageClass.Archive);
Console.WriteLine("Create Archive bucket succeeded, {0} ", bucket.Name);
}
catch (Exception ex)
{
Console.WriteLine("Create Archive bucket failed, {0}", ex.Message);
}
// Unggah objek dan atur kelas penyimpanan ke Archive.
try
{
byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
MemoryStream requestContent = new MemoryStream(binaryData);
client.PutObject(bucketName, objectName, requestContent);
Console.WriteLine("Put object succeeded, {0}", objectName);
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}
var metadata = client.GetObjectMetadata(bucketName, objectName);
string storageClass = metadata.HttpMetadata["x-oss-storage-class"] as string;
if (storageClass != "Archive")
{
Console.WriteLine("StorageClass is {0}", storageClass);
return;
}
// Pulihkan objek Archive.
RestoreObjectResult result = client.RestoreObject(bucketName, objectName);
Console.WriteLine("RestoreObject result HttpStatusCode : {0}", result.HttpStatusCode);
if (result.HttpStatusCode != HttpStatusCode.Accepted)
{
throw new OssException(result.RequestId + ", " + result.HttpStatusCode + " ,");
}
while (maxWaitTimeInSeconds > 0)
{
var meta = client.GetObjectMetadata(bucketName, objectName);
string restoreStatus = meta.HttpMetadata["x-oss-restore"] as string;
if (restoreStatus != null && restoreStatus.StartsWith("ongoing-request=\"false\"", StringComparison.InvariantCultureIgnoreCase))
{
break;
}
Thread.Sleep(1000);
// Kurangi waktu tunggu maksimum sebesar 1 detik.
maxWaitTimeInSeconds--;
}
if (maxWaitTimeInSeconds == 0)
{
Console.WriteLine("RestoreObject is timeout. ");
throw new TimeoutException();
}
else
{
Console.WriteLine("RestoreObject is successful. ");
}Memulihkan objek Cold Archive
Kode berikut memberikan contoh cara memulihkan objek Cold Archive:
using Aliyun.OSS;
using Aliyun.OSS.Model;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket.
var bucketName = "examplebucket";
// Tentukan path lengkap objek Cold Archive. Path tidak boleh mengandung nama bucket.
var objectName = "yourObjectName";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan.
var conf = new ClientConfiguration();
// Atur versi signature ke V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
// Pulihkan objek Cold Archive.
var request = new RestoreObjectRequest(bucketName, objectName);
// Atur prioritas pemulihan untuk objek Cold Archive.
// TierType.Expedited: Objek dipulihkan dalam waktu kurang dari 1 jam.
// TierType.Standard: Objek dipulihkan dalam waktu 2 hingga 5 jam.
// TierType.Bulk: Objek dipulihkan dalam waktu 5 hingga 12 jam.
// Konfigurasikan parameter pemulihan. Misalnya, atur agar pemulihan selesai dalam 1 jam dan objek tetap dalam keadaan dipulihkan selama 2 hari.
// Parameter pertama, Days, menentukan jumlah hari objek tetap dalam keadaan dipulihkan. Nilai default adalah 1. Parameter ini berlaku untuk objek Archive maupun Cold Archive.
// Parameter kedua, Tier, menentukan prioritas pemulihan. Parameter ini hanya berlaku untuk objek Cold Archive.
request.Days = 2;
request.Tier = TierType.Bulk;
RestoreObjectResult result = client.RestoreObject(request);
Console.WriteLine("RestoreObject result HttpStatusCode : {0}", result.HttpStatusCode);Referensi
Untuk kode contoh lengkap tentang pemulihan objek Archive dan Cold Archive, lihat GitHub example.
Untuk informasi selengkapnya mengenai operasi API untuk memulihkan objek Archive dan Cold Archive, lihat RestoreObject.