Topik ini menjelaskan cara menggunakan metode CopyObjectAsync dari OSS SDK untuk C# 2.0 untuk menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan dalam wilayah yang sama. Bucket tujuan dapat berupa bucket sumber atau bucket lainnya.
Catatan
Kode contoh dalam topik ini menggunakan ID wilayah
cn-hangzhoudari wilayah China (Hangzhou). Secara default, endpoint publik digunakan untuk mengakses sumber daya di bucket. Jika Anda ingin mengakses sumber daya di bucket dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan endpoint internal. Untuk informasi lebih lanjut tentang wilayah dan endpoint yang didukung, lihat Wilayah dan endpoint OSS.Untuk menyalin objek, Anda harus memiliki izin baca pada objek sumber serta izin baca dan tulis pada bucket tujuan.
Bucket sumber dan bucket tujuan harus berada di wilayah yang sama. Sebagai contoh, objek dalam bucket di wilayah China (Hangzhou) tidak dapat disalin ke bucket di wilayah China (Qingdao).
Pastikan bahwa tidak ada kebijakan retensi yang dikonfigurasi untuk bucket sumber dan bucket tujuan. Jika tidak, pesan kesalahan Objek yang Anda tentukan tidak dapat diubah. 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 | Aksi | Definisi |
CopyObject |
| Menyalin objek dalam bucket atau antar bucket di 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 ini diperlukan. | |
| ||
| Jika Anda menentukan tag versi tertentu dari 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
Berikut adalah kode contoh untuk menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan.
using OSS = AlibabaCloud.OSS.V2; // Tentukan alias untuk OSS SDK untuk mengurangi verbositas kode.
var region = "cn-hangzhou"; // (Diperlukan) Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
var endpoint = null as string; // (Opsional) Tentukan endpoint yang digunakan untuk mengakses OSS. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var srcBucket = "nama bucket sumber Anda"; // (Diperlukan) Tentukan nama bucket sumber.
var srcKey = "nama kunci sumber Anda"; // (Diperlukan) Tentukan nama objek sumber dalam format folder/namaObjek.
var dstBucket = "nama bucket tujuan Anda"; // (Diperlukan) Tentukan nama bucket tujuan.
var dstKey = "nama kunci tujuan Anda"; // (Diperlukan) Tentukan nama objek tujuan dalam format folder/namaObjek.
// Muat konfigurasi default dari SDK, memuat kredensial (seperti pasangan AccessKey) dari variabel lingkungan.
var cfg = OSS.Configuration.LoadDefault();
// Dapatkan kredensial akses dari variabel lingkungan untuk otentikasi (format: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET).
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// Tentukan wilayah tempat bucket berada.
cfg.Region = region;
// Nilai default parameter endpoint akan ditimpa jika endpoint diberikan.
if(endpoint != null)
{
cfg.Endpoint = endpoint;
}
// Gunakan konfigurasi sebelumnya untuk membuat instance OSSClient.
using var client = new OSS.Client(cfg);
// Panggil metode CopyObjectAsync untuk menyalin objek.
var result = await client.CopyObjectAsync(new OSS.Models.CopyObjectRequest()
{
Bucket = dstBucket,
Key = dstKey,
SourceBucket = srcBucket,
SourceKey = srcKey
});
// Keluarkan hasilnya.
Console.WriteLine("CopyObject selesai"); // Operasi selesai.
Console.WriteLine($"StatusCode: {result.StatusCode}"); // Kode status HTTP.
Console.WriteLine($"RequestId: {result.RequestId}"); // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
Console.WriteLine("Header Respons:"); // Header respons.
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value)); // Telusuri dan keluarkan semua header respons.Referensi
Untuk kode contoh lengkap untuk menyalin objek, lihat CopyObject.cs.