全部产品
Search
文档中心

Object Storage Service:Tambahkan tag ke objek menggunakan OSS SDK untuk Go 2.0

更新时间:Aug 07, 2025

Object Storage Service (OSS) memungkinkan Anda menambahkan tag ke objek untuk klasifikasi. Topik ini menjelaskan cara menambahkan tag menggunakan OSS SDK for Go V2.

Catatan

  • Kode contoh dalam topik ini menggunakan ID wilayah cn-hangzhou dari Wilayah China (Hangzhou). Secara default, titik akhir publik digunakan untuk mengakses sumber daya di bucket. Jika Anda ingin mengakses sumber daya di bucket dengan menggunakan layanan Alibaba Cloud lainnya di wilayah yang sama dengan lokasi bucket, 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 Konfigurasikan kredensial akses.

  • Izin oss:PutObjectTagging diperlukan untuk menandai objek. Untuk informasi lebih lanjut, lihat Berikan izin kustom kepada Pengguna RAM.

Tambahkan tag saat Anda mengunggah objek

Tambahkan tag ke objek dalam tugas unggah sederhana

Kode berikut menunjukkan cara menambahkan tag saat mengunggah objek.

package main

import (
	"context"
	"flag"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// 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.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parse parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 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")
	}

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

	// Tentukan konten yang ingin Anda unggah.
	content := "hi oss"

	// 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 mengunggah objek.
	request := &oss.PutObjectRequest{
		Bucket:  oss.Ptr(bucketName),                // Nama bucket.
		Key:     oss.Ptr(objectName),                // Nama objek.
		Body:    strings.NewReader(content),         // Konten untuk diunggah.
		Tagging: oss.Ptr("tag1=value1&tag2=value2"), // Tentukan tag objek.
	}

	// Jalankan permintaan.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

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

Tambahkan tag ke objek saat Anda melakukan unggah multipart

Kode berikut menunjukkan cara menambahkan tag saat melakukan unggah multipart.

package main

import (
	"bufio"
	"bytes"
	"context"
	"flag"
	"io"
	"log"
	"os"
	"sync"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket sumber.
	objectName string // Nama objek sumber.

)

// 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, "object", "", "Nama objek sumber.")
}

func main() {
	// Parse parameter baris perintah.
	flag.Parse()

	// Tentukan ID unggahan.
	var uploadId string

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

	// Periksa apakah nama objek sumber telah ditentukan.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek sumber 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)

	// Inisialisasi permintaan unggah multipart.
	initRequest := &oss.InitiateMultipartUploadRequest{
		Bucket:  oss.Ptr(bucketName),
		Key:     oss.Ptr(objectName),
		Tagging: oss.Ptr("tag1=value1&tag2=value2"), // Tentukan tag objek.
	}

	// Jalankan permintaan untuk memulai tugas unggah multipart.
	initResult, err := client.InitiateMultipartUpload(context.TODO(), initRequest)
	if err != nil {
		log.Fatalf("gagal memulai unggah multipart %v", err)
	}

	// Tampilkan hasil inisialisasi.
	log.Printf("hasil inisiasi unggah multipart:%#v\n", *initResult.UploadId)
	uploadId = *initResult.UploadId

	// Inisialisasi wait group dan mutex.
	var wg sync.WaitGroup
	var parts []oss.UploadPart
	count := 3
	var mu sync.Mutex

	// Baca data dari file lokal ke memori dan ganti yourLocalFile dengan jalur sebenarnya dari file lokal yang berisi nama file.
	file, err := os.Open("/Users/leyinhui/Downloads/iTerm2")
	if err != nil {
		log.Fatalf("gagal membuka file lokal %v", err)
	}
	defer file.Close()

	bufReader := bufio.NewReader(file)
	content, err := io.ReadAll(bufReader)
	if err != nil {
		log.Fatalf("gagal membaca file lokal %v", err)
	}
	log.Printf("ukuran file: %d\n", len(content))

	// Hitung ukuran setiap bagian.
	chunkSize := len(content) / count
	if chunkSize == 0 {
		chunkSize = 1
	}

	// Mulai beberapa goroutine untuk tugas unggah multipart.
	for i := 0; i < count; i++ {
		start := i * chunkSize
		end := start + chunkSize
		if i == count-1 {
			end = len(content)
		}

		wg.Add(1)
		go func(partNumber int, start, end int) {
			defer wg.Done()

			// Buat permintaan unggah multipart.
			partRequest := &oss.UploadPartRequest{
				Bucket:     oss.Ptr(bucketName),                 // Nama bucket tujuan.
				Key:        oss.Ptr(objectName),                 // Nama objek tujuan.
				PartNumber: int32(partNumber),                   // Nomor bagian.
				UploadId:   oss.Ptr(uploadId),                   // ID unggahan.
				Body:       bytes.NewReader(content[start:end]), // Konten bagian.
			}

			// Kirim permintaan untuk mengunggah bagian.
			partResult, err := client.UploadPart(context.TODO(), partRequest)
			if err != nil {
				log.Fatalf("gagal mengunggah bagian %d: %v", partNumber, err)
			}

			// Tampilkan hasil permintaan.
			part := oss.UploadPart{
				PartNumber: partRequest.PartNumber,
				ETag:       partResult.ETag,
			}

			// Gunakan mutex untuk melindungi data bersama.
			mu.Lock()
			parts = append(parts, part)
			mu.Unlock()
		}(i+1, start, end)
	}

	// Tunggu hingga semua goroutine selesai.
	wg.Wait()

	// Selesaikan tugas unggah multipart.
	request := &oss.CompleteMultipartUploadRequest{
		Bucket:   oss.Ptr(bucketName),
		Key:      oss.Ptr(objectName),
		UploadId: oss.Ptr(uploadId),
		CompleteMultipartUpload: &oss.CompleteMultipartUpload{
			Parts: parts,
		},
	}
	result, err := client.CompleteMultipartUpload(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menyelesaikan unggah multipart %v", err)
	}

	// Tampilkan hasil.
	log.Printf("hasil penyelesaian unggah multipart:%#v\n", result)
}

Tambahkan tag ke objek saat Anda melakukan unggah tambahan

Kode berikut menunjukkan cara menambahkan tag saat melakukan unggah tambahan.

package main

import (
	"context"
	"flag"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Definisikan variabel global.
var (
	region     string
	bucketName string
	objectName string
)

// 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.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parse parameter baris perintah.
	flag.Parse()

	// Tentukan posisi dari mana operasi tambahan dimulai.
	var (
		position = int64(0)
	)

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 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")
	}

	// Periksa apakah nama objek telah ditentukan.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek 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)

	// Tentukan konten yang ingin Anda tambahkan.
	content := "hi append object"

	// Buat permintaan AppendObject untuk melakukan operasi tambahan pertama.
	request := &oss.AppendObjectRequest{
		Bucket:   oss.Ptr(bucketName),
		Key:      oss.Ptr(objectName),
		Position: oss.Ptr(position),
		Body:     strings.NewReader(content),
		Tagging:  oss.Ptr("tag1=value1&tag2=value2"), // Tentukan tag objek.
	}

	// Lakukan operasi tambahan pertama dan proses hasilnya.
	// Pertama kali objek ditambahkan, operasi tambahan dimulai pada 0. Posisi untuk operasi tambahan berikutnya termasuk dalam respons.
	result, err := client.AppendObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menambahkan objek %v", err)
	}

	// Buat permintaan AppendObject untuk melakukan operasi tambahan kedua.
	request = &oss.AppendObjectRequest{
		Bucket:   oss.Ptr(bucketName),
		Key:      oss.Ptr(objectName),
		Position: oss.Ptr(result.NextPosition), // Dapatkan NextPosition dari nilai return AppendObject pertama
		Body:     strings.NewReader("hi append object"),
	}

	// Lakukan operasi tambahan kedua dan proses hasilnya.
	result, err = client.AppendObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menambahkan objek %v", err)
	}

	log.Printf("hasil tambah objek:%#v\n", result)
}

Tambahkan tag ke objek saat Anda menyalin objek

Kode berikut menunjukkan cara menambahkan tag saat menyalin 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"
)

// Definisikan 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 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() {
	// Parse 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 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 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 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,           // Setel kelas penyimpanan ke Standard.
		TaggingDirective: oss.Ptr("Replace"),                 // Abaikan tag objek sumber.
		Tagging:          oss.Ptr("tag1=value1&tag2=value2"), // Tentukan tag objek.
	}

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

	// Tampilkan hasil.
	log.Printf("hasil salin objek:%#v\n", copyResult)

}

Tambahkan tag atau modifikasi tag objek yang ada

Tambahkan tag atau modifikasi tag objek yang ada

Jika objek yang ada tidak memiliki tag atau tag yang ditambahkan tidak sesuai dengan kebutuhan Anda, Anda dapat menambahkan atau memodifikasi tag tersebut.

Kode berikut menunjukkan cara menambahkan atau memodifikasi tag pada objek yang ada.

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

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// 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.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parse parameter baris perintah.
	flag.Parse()

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

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

	// Periksa apakah nama objek telah ditentukan.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek 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 menambahkan tag.
	putRequest := &oss.PutObjectTaggingRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
		Tagging: &oss.Tagging{
			TagSet: &oss.TagSet{
				Tags: []oss.Tag{
					{
						Key:   oss.Ptr("k1"), // Kunci tag.
						Value: oss.Ptr("v1"), // Nilai tag.
					},
					{
						Key:   oss.Ptr("k2"), // Kunci tag.
						Value: oss.Ptr("v2"), // Nilai tag.
					},
				},
			},
		},
	}

	// Kirim permintaan.
	putResult, err := client.PutObjectTagging(context.TODO(), putRequest)
	if err != nil {
		log.Fatalf("gagal menambahkan tag objek %v", err)
	}

	// Tampilkan hasil.
	log.Printf("hasil tambah tag objek:%#v\n", putResult)
}

Referensi

  • Untuk kode sampel lengkap yang digunakan untuk mengonfigurasi penandaan objek, kunjungi GitHub.

  • Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk mengonfigurasi penandaan objek, lihat PutObjectTagging.