全部产品
Search
文档中心

Object Storage Service:Konversi kelas penyimpanan objek menggunakan OSS SDK untuk Go 2.0

更新时间:Aug 07, 2025

Object Storage Service (OSS) menyediakan kelas penyimpanan berikut untuk mencakup berbagai skenario penyimpanan data, mulai dari data panas hingga data dingin: Standard, Infrequent Access (IA), Archive, Cold Archive, dan Deep Cold Archive. Di OSS, setelah sebuah objek dibuat, isi objek tersebut tidak dapat diubah. Anda hanya dapat mengonversi kelas penyimpanan salinannya. Topik ini menjelaskan cara menggunakan metode Copier.Copy atau Client.CopyObject untuk membuat salinan dan mengubah kelas penyimpanannya.

Catatan penggunaan

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

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Mengubah kelas penyimpanan objek memerlukan izin oss:GetObject, oss:PutObject, dan oss:RestoreObject. Untuk informasi lebih lanjut, lihat Cara Memberikan Kebijakan Kustom kepada Pengguna RAM.

Kode contoh

(Direkomendasikan) Gunakan Copier untuk mengubah kelas penyimpanan

Kami merekomendasikan Anda menggunakan metode Copier.Copy untuk mengubah kelas penyimpanan sebuah objek. Metode ini mengintegrasikan antarmuka salinan sederhana dan multipart, secara otomatis memilih metode yang sesuai berdasarkan parameter dalam permintaan.

Berikut adalah kode contoh bagaimana menggunakan metode Copier.Copy untuk mengubah kelas penyimpanan sebuah objek dari Standard menjadi Archive.

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(&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 telah ditentukan.
	if len(srcBucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

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

	// Jika nama bucket tujuan tidak ditentukan, nama bucket sumber akan digunakan.
	if len(destBucketName) == 0 {
		destBucketName = srcBucketName
	}

	// Periksa apakah nama objek sumber telah ditentukan.
	if len(srcObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek sumber diperlukan")
	}

	// Periksa apakah nama objek tujuan telah ditentukan.
	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 copier.
	c := client.NewCopier()

	// 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.
		StorageClass: oss.StorageClassArchive, // Tentukan kelas penyimpanan sebagai Archive.
	}

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

	// Tampilkan hasilnya.
	log.Printf("hasil penyalinan objek:%#v\n", result)
}

Mengubah kelas penyimpanan dengan menggunakan metode CopyObject

Berikut adalah kode contoh bagaimana menggunakan metode CopyObject untuk mengubah kelas penyimpanan sebuah objek dari Standard menjadi Archive.

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.
	bucketName     string // Nama bucket sumber.
	objectName     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(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket sumber.")
	flag.StringVar(&objectName, "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 telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket sumber diperlukan")
	}

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

	// Jika nama bucket tujuan tidak ditentukan, nama bucket sumber akan digunakan.
	if len(destBucketName) == 0 {
		destBucketName = bucketName
	}

	// Periksa apakah nama objek sumber telah ditentukan.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek sumber diperlukan")
	}

	// Periksa apakah nama objek tujuan telah ditentukan.
	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.
	copyRequest := &oss.CopyObjectRequest{
		Bucket:       oss.Ptr(destBucketName), // Nama bucket tujuan.
		Key:          oss.Ptr(destObjectName), // Nama objek tujuan.
		SourceKey:    oss.Ptr(objectName),     // Nama objek sumber.
		SourceBucket: oss.Ptr(bucketName),     // Nama bucket sumber.
		StorageClass: oss.StorageClassArchive, // Ubah kelas penyimpanan menjadi Archive.
	}

	// Salin objek sumber dan proses hasilnya.
	copyResult, err := client.CopyObject(context.TODO(), copyRequest)
	if err != nil {
		log.Fatalf("gagal menyalin objek: %v", err)
	}
	log.Printf("hasil penyalinan objek: %#v\n", copyResult)
}

Referensi

  • Untuk informasi lebih lanjut tentang Operasi API yang dapat Anda panggil untuk mengubah kelas penyimpanan objek menggunakan Copier, lihat Copier.Copy.

  • Untuk informasi lebih lanjut tentang Operasi API yang dapat Anda panggil untuk mengubah kelas penyimpanan objek menggunakan metode CopyObject, lihat CopyObject.