All Products
Search
Document Center

Object Storage Service:Salin objek (SDK untuk Go V2)

Last Updated:Aug 26, 2026

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-hangzhou dan 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

oss:GetObject

Menyalin objek dalam satu bucket atau antar bucket dalam wilayah yang sama.

oss:PutObject

oss:GetObjectVersion

Jika Anda menentukan versi objek sumber melalui versionId, izin ini juga diperlukan.

oss:GetObjectTagging

Jika Anda menyalin tag objek melalui x-oss-tagging, izin-izin ini diperlukan.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Jika Anda menentukan tag dari versi tertentu objek sumber melalui versionId, izin ini juga diperlukan.

kms:GenerateDataKey

Saat menyalin objek, jika metadata objek tujuan berisi X-Oss-Server-Side-Encryption: KMS, kedua izin ini diperlukan.

kms:Decrypt

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:

  • Copy (default): menyalin tag objek sumber ke objek tujuan.

  • Replace: mengabaikan tag objek sumber dan menggunakan tag yang ditentukan dalam permintaan.

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(&region, "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.