Gunakan metode CopyObject dari SDK untuk Go V2 untuk menyalin objek berukuran kurang dari 5 GiB antara bucket sumber dan bucket tujuan dalam wilayah yang sama. Bucket sumber dan tujuan dapat sama atau berbeda.
Perhatian
Kode contoh dalam topik ini menggunakan ID wilayah China (Hangzhou)
cn-hangzhoudan titik akhir publik secara default. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lain dalam wilayah yang sama, gunakan titik akhir internal sebagai gantinya. Untuk pemetaan antara wilayah OSS dan titik akhir, lihat Wilayah dan Titik Akhir.Topik ini menggunakan variabel lingkungan sebagai contoh untuk membaca kredensial akses. Untuk informasi tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.
Diperlukan izin baca pada objek sumber serta izin baca dan tulis pada bucket tujuan untuk menyalin objek.
Salinan lintas-wilayah tidak didukung. Misalnya, Anda tidak dapat menyalin objek dari bucket di wilayah China (Hangzhou) ke bucket di wilayah China (Qingdao).
Saat menyalin objek, pastikan baik bucket sumber maupun bucket tujuan tidak memiliki kebijakan retensi yang dikonfigurasi. Jika tidak, operasi akan gagal dan mengembalikan error: The object you specified is immutable.
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 Bucket Policy.
|
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. |
|
|
|
Tanda tangan metode
func (c *Client) CopyObject(ctx context.Context, request *CopyObjectRequest, optFns ...func(*Options)) (*CopyObjectResult, error)
Parameter permintaan
|
Parameter |
Type |
Description |
|
ctx |
context.Context |
Konteks permintaan. Anda dapat menggunakannya untuk mengatur timeout keseluruhan permintaan. |
|
request |
*CopyObjectRequest |
Parameter permintaan untuk operasi ini. Untuk informasi selengkapnya, lihat CopyObjectRequest |
|
optFns |
...func(*Options) |
(Opsional) Opsi konfigurasi. Untuk informasi selengkapnya, lihat Options |
Tabel berikut menjelaskan parameter umum CopyObjectRequest:
|
Parameter |
Type |
Description |
|
Bucket |
*string |
Menentukan nama bucket tujuan. |
|
Key |
*string |
Menentukan nama objek tujuan. |
|
SourceBucket |
*string |
Menentukan nama bucket sumber. |
|
SourceKey |
*string |
Menentukan nama objek sumber. |
|
ForbidOverwrite |
*string |
Menentukan apakah objek tujuan yang memiliki nama sama akan ditimpa selama operasi CopyObject. |
|
Tagging |
*string |
Menentukan tag objek. Anda dapat menentukan beberapa tag sekaligus, misalnya TagA=A&TagB=B. |
|
TaggingDirective |
*string |
Menentukan cara mengatur tag objek tujuan. Nilai yang valid:
|
Parameter respons
|
Nilai kembali |
Type |
Description |
|
result |
*CopyObjectResult |
Nilai kembali dari operasi. Nilai ini berlaku saat err bernilai nil. Untuk informasi selengkapnya, lihat CopyObjectResult |
|
err |
error |
Status permintaan. Jika permintaan gagal, err tidak bernilai nil. |
Kode contoh
Gunakan kode contoh berikut untuk 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 tempat bucket berada.
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 command line.
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 command line.
flag.Parse()
// Periksa apakah nama bucket sumber kosong.
if len(srcBucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket sumber wajib diisi")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
// Jika nama bucket tujuan tidak ditentukan, gunakan nama bucket sumber.
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 wajib diisi")
}
// Periksa apakah nama objek tujuan kosong.
if len(destObjectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek tujuan wajib diisi")
}
// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat client 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.
}
// Lakukan operasi salin objek dan tangani hasilnya.
result, err := client.CopyObject(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menyalin objek %v", err)
}
log.Printf("hasil salin objek:%#v\n", result)
}
Referensi
Untuk kode contoh lengkap penyalinan objek, lihat contoh GitHub.
Untuk operasi API yang digunakan untuk menyalin objek, lihat CopyObject.