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-hangzhoudari 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:PutObjectTaggingdiperlukan 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(®ion, "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(®ion, "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(®ion, "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(®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() {
// 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(®ion, "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.