全部产品
Search
文档中心

Object Storage Service:Ganti nama objek (Go SDK V2)

更新时间:Nov 09, 2025

OSS tidak mendukung penggantian nama objek secara langsung. Untuk mengganti nama objek dalam bucket yang sama, Anda dapat memanggil operasi API CopyObject untuk menyalin objek sumber ke objek tujuan, lalu memanggil operasi API DeleteObject untuk menghapus objek sumber.

Catatan penggunaan

  • Kode contoh dalam topik ini menggunakan ID Wilayah cn-hangzhou untuk Wilayah Hangzhou, Tiongkok. Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam bucket. Jika Anda ingin mengakses sumber daya dalam bucket dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.

  • Kode contoh dalam topik ini membaca kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.

Kode contoh

Gunakan metode salinan sederhana (CopyObject) untuk mengganti nama objek

Anda dapat menggunakan metode salinan sederhana, CopyObject, untuk mengganti nama objek.

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.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
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 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, 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 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 atur penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menyalin objek.
	copyRequest := &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.
		StorageClass: oss.StorageClassStandard, // Atur kelas penyimpanan ke Standard.
	}

	// Jalankan operasi penyalinan objek dan proses hasilnya.
	copyResult, err := client.CopyObject(context.TODO(), copyRequest)
	if err != nil {
		log.Fatalf("gagal menyalin objek: %v", err)
	}

	// Buat permintaan untuk menghapus objek.
	deleteRequest := &oss.DeleteObjectRequest{
		Bucket: oss.Ptr(srcBucketName), // Nama bucket.
		Key:    oss.Ptr(srcObjectName), // Nama objek yang akan dihapus.
	}

	// Jalankan operasi penghapusan objek.
	deleteResult, err := client.DeleteObject(context.TODO(), deleteRequest)
	if err != nil {
		log.Fatalf("gagal menghapus beberapa objek %v", err)
	}

	// Cetak hasil operasi penyalinan.
	log.Printf("hasil penyalinan objek:%#v\n", copyResult)
	// Cetak hasil operasi penghapusan.
	log.Printf("hasil penghapusan objek:%#v\n", deleteResult)
}

Gunakan copier untuk mengganti nama objek

Kode berikut menunjukkan cara menggunakan metode Copier.Copy untuk mengganti nama objek.

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.
)

// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
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 baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket sumber kosong.
	if len(srcBucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// 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 diperlukan")
	}

	// Periksa apakah nama objek tujuan kosong.
	if len(destObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek tujuan diperlukan")
	}

	// Konfigurasikan klien OSS.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat copier.
	c := client.NewCopier()

	// Buat permintaan untuk menyalin objek.
	copyRequest := &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.
		StorageClass: oss.StorageClassStandard, // Tentukan kelas penyimpanan sebagai Archive.
	}

	// Jalankan operasi penyalinan objek.
	result, err := c.Copy(context.TODO(), copyRequest)
	if err != nil {
		log.Fatalf("gagal menyalin objek %v", err) // Jika operasi penyalinan gagal, catat kesalahan dan keluar.
	}

	// Buat permintaan untuk menghapus objek.
	deleteRequest := &oss.DeleteObjectRequest{
		Bucket: oss.Ptr(srcBucketName), // Nama bucket.
		Key:    oss.Ptr(srcObjectName), // Nama objek yang akan dihapus.
	}

	// Jalankan operasi penghapusan objek.
	deleteResult, err := client.DeleteObject(context.TODO(), deleteRequest)
	if err != nil {
		log.Fatalf("gagal menghapus beberapa objek %v", err)
	}

	// Cetak hasil operasi penyalinan.
	log.Printf("hasil penyalinan objek:%#v\n", result)
	// Cetak hasil operasi penghapusan.
	log.Printf("hasil penghapusan objek:%#v\n", deleteResult)
}

Referensi

  • Untuk informasi lebih lanjut tentang operasi API untuk mengganti nama objek menggunakan copier, lihat Copier.Copy.

  • Untuk informasi lebih lanjut tentang operasi API untuk mengganti nama objek menggunakan metode salinan sederhana, lihat CopyObject.