Gunakan metode CopyObjectAsync dalam C# SDK V2 untuk menyalin objek (lebih kecil dari 5 GiB) dari bucket sumber ke bucket tujuan yang sama atau berbeda dalam wilayah yang sama.
Pertimbangan
-
Kode contoh menggunakan ID wilayah China (Hangzhou) (
cn-hangzhou) dan titik akhir publik. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya, lihat Wilayah dan titik akhir OSS. -
Untuk menyalin objek, Anda harus memiliki izin baca pada objek sumber serta izin daftar kontrol akses (baca dan tulis) pada bucket tujuan.
-
Bucket sumber dan bucket tujuan harus berada dalam wilayah yang sama. Misalnya, objek dalam bucket yang berlokasi di wilayah China (Hangzhou) tidak dapat disalin ke bucket yang berlokasi di wilayah China (Qingdao).
-
Saat menyalin objek, pastikan baik bucket sumber maupun bucket tujuan tidak memiliki kebijakan retensi. Jika tidak, error The object you specified is immutable. akan dikembalikan.
Izin
Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui kebijakan RAM atau Kebijakan Bucket.
|
API |
Action |
Description |
|
CopyObject |
|
Menyalin objek dalam satu bucket atau antar bucket dalam wilayah yang sama. |
|
|
||
|
|
Jika Anda menentukan versi objek sumber melalui versionId, izin ini juga diperlukan. |
|
|
|
Jika Anda menyalin tag objek melalui x-oss-tagging, izin-izin ini diperlukan. |
|
|
|
||
|
|
Jika Anda menentukan tag dari versi tertentu objek sumber melalui versionId, izin ini juga diperlukan. |
|
|
|
Saat menyalin objek, jika metadata objek tujuan berisi X-Oss-Server-Side-Encryption: KMS, kedua izin ini diperlukan. |
|
|
|
Kode contoh
Kode berikut menyalin objek lebih kecil dari 5 GiB dari bucket sumber ke bucket tujuan.
using OSS = AlibabaCloud.OSS.V2; // Buat alias untuk Alibaba Cloud OSS SDK agar penggunaan selanjutnya lebih sederhana
var region = "cn-hangzhou"; // Wajib. Tentukan wilayah bucket. Pada contoh ini, wilayahnya adalah China (Hangzhou), dan ID wilayahnya adalah cn-hangzhou
var endpoint = null as string; // Opsional. Tentukan titik akhir yang digunakan untuk mengakses OSS. Pada contoh ini, titik akhir untuk China (Hangzhou) adalah https://oss-cn-hangzhou.aliyuncs.com
var srcBucket = "your srcBucket name"; // Wajib. Tentukan nama bucket sumber
var srcKey = "your srcKey name"; // Wajib. Tentukan nama objek di bucket sumber dalam format folder/objectName
var dstBucket = "your dstBucket name"; // Wajib. Tentukan nama bucket tujuan
var dstKey = "your dstkey name"; // Wajib. Tentukan nama objek di bucket tujuan dalam format folder/objectName
// Muat konfigurasi default OSS SDK, yang secara otomatis membaca informasi kredensial (seperti AccessKey) dari variabel lingkungan
var cfg = OSS.Configuration.LoadDefault();
// Secara eksplisit atur untuk menggunakan variabel lingkungan dalam otentikasi kredensial (format: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// Atur wilayah bucket dalam konfigurasi
cfg.Region = region;
// Jika titik akhir ditentukan, timpa titik akhir default
if(endpoint != null)
{
cfg.Endpoint = endpoint;
}
// Buat instans client OSS menggunakan informasi konfigurasi
using var client = new OSS.Client(cfg);
// Panggil metode CopyObjectAsync untuk melakukan operasi penyalinan objek OSS
var result = await client.CopyObjectAsync(new OSS.Models.CopyObjectRequest()
{
Bucket = dstBucket,
Key = dstKey,
SourceBucket = srcBucket,
SourceKey = srcKey
});
// Tampilkan hasil unggah
Console.WriteLine("CopyObject done"); // Menunjukkan bahwa operasi telah selesai
Console.WriteLine($"StatusCode: {result.StatusCode}"); // Kode status HTTP
Console.WriteLine($"RequestId: {result.RequestId}"); // RequestId, digunakan untuk troubleshooting oleh Alibaba Cloud
Console.WriteLine("Response Headers:"); // Informasi header respons
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value)); // Iterasi dan cetak semua header respons
Referensi
Untuk kode contoh lengkap, lihat CopyObject.cs.