Topik ini menjelaskan cara menggunakan metode CopyObject dari OSS SDK untuk Go 2.0 untuk menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan di wilayah yang sama. Bucket tujuan dapat berupa bucket sumber atau bucket lainnya.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan ID wilayah
cn-hangzhoudari Wilayah China (Hangzhou). Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam sebuah bucket. Jika Anda ingin mengakses sumber daya dalam bucket dengan menggunakan layanan Alibaba Cloud lainnya di wilayah yang sama dengan lokasi bucket tersebut, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir.Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi Kredensial Akses.
Untuk menyalin objek, Anda harus memiliki izin baca pada objek sumber dan izin baca serta tulis pada bucket tujuan.
Bucket sumber dan bucket tujuan harus berada di wilayah yang sama. Sebagai contoh, objek dalam bucket yang terletak di Wilayah China (Hangzhou) tidak dapat disalin ke bucket lain yang terletak di Wilayah China (Qingdao).
Pastikan bahwa tidak ada kebijakan retensi yang dikonfigurasi untuk bucket sumber dan bucket tujuan. Jika tidak, pesan kesalahan berikut akan dikembalikan: Objek yang Anda tentukan tidak dapat diubah.
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. | |
|
Metode
func (c *Client) CopyObject(ctx context.Context, request *CopyObjectRequest, optFns ...func(*Options)) (*CopyObjectResult, error)Parameter permintaan
Parameter | Tipe | Deskripsi |
ctx | context.Context | Konteks permintaan, yang dapat digunakan untuk menentukan durasi total permintaan. |
request | *CopyObjectRequest | Menentukan parameter operasi API tertentu. Untuk informasi lebih lanjut, lihat CopyObjectRequest. |
optFns | ...func(*Options) | Parameter opsional. Untuk informasi lebih lanjut, lihat Options. |
Parameter umum CopyObjectRequest
Parameter | Tipe | Deskripsi |
Bucket | *string | Nama bucket tujuan. |
Key | *string | Nama objek tujuan. |
SourceBucket | *string | Nama bucket sumber. |
SourceKey | *string | Nama objek sumber. |
ForbidOverwrite | *string | Menentukan apakah operasi CopyObject menimpa objek yang sudah ada dengan nama yang sama. |
Tagging | *string | Tag objek tujuan. Anda dapat mengonfigurasi beberapa tag untuk objek tujuan. Contoh: TagA=A&TagB=B. |
TaggingDirective | *string | Metode yang digunakan untuk mengonfigurasi tag untuk objek tujuan. Nilai valid:
|
Parameter tanggapan
Parameter tanggapan | Tipe | Deskripsi |
result | *CopyObjectResult | Tanggapan atas operasi. Parameter ini valid ketika nilai err adalah nil. Untuk informasi lebih lanjut, lihat CopyObjectResult. |
err | error | Status permintaan. Jika permintaan gagal, nilai err tidak dapat nil. |
Contoh
Berikut ini adalah kode contoh yang menunjukkan cara menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan:
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Tentukan variabel global.
var (
region string // Wilayah.
srcBucketName string // Nama bucket sumber.
srcObjectName string // Nama objek sumber.
destBucketName string // Nama bucket tujuan.
destObjectName string // Nama objek tujuan.
)
// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&srcBucketName, "src-bucket", "", "Nama bucket sumber.")
flag.StringVar(&srcObjectName, "src-object", "", "Nama objek sumber.")
flag.StringVar(&destBucketName, "dest-bucket", "", "Nama bucket tujuan.")
flag.StringVar(&destObjectName, "dest-object", "", "Nama objek tujuan.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket sumber kosong.
if len(srcBucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket sumber diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Jika nama bucket tujuan tidak ditentukan, nama bucket sumber digunakan.
if len(destBucketName) == 0 {
destBucketName = srcBucketName
}
// Periksa apakah nama objek sumber kosong.
if len(srcObjectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek sumber diperlukan")
}
// Periksa apakah nama objek tujuan kosong.
if len(destObjectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek tujuan diperlukan")
}
// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk menyalin objek.
request := &oss.CopyObjectRequest{
Bucket: oss.Ptr(destBucketName), // Nama bucket tujuan.
Key: oss.Ptr(destObjectName), // Nama objek tujuan.
SourceKey: oss.Ptr(srcObjectName), // Nama objek sumber.
SourceBucket: oss.Ptr(srcBucketName), // Nama bucket sumber.
}
// Salin objek sumber dan proses hasilnya.
result, err := client.CopyObject(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menyalin objek %v", err)
}
log.Printf("hasil penyalinan objek:%#v\n", result)
}
Referensi
Untuk kode contoh lengkap yang digunakan untuk menyalin objek, kunjungi GitHub.
Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk menyalin objek, lihat CopyObject.