All Products
Search
Document Center

Object Storage Service:Mengelola metadata objek (Go SDK V1)

Last Updated:Nov 29, 2025

Objek yang disimpan di Object Storage Service (OSS) terdiri dari kunci, data, dan metadata objek. Metadata objek menjelaskan properti objek tersebut, mencakup header HTTP standar dan metadata yang ditentukan pengguna. Anda dapat menyetel header HTTP standar untuk menentukan kebijakan permintaan HTTP kustom, seperti kebijakan cache atau unduh paksa, serta menyetel metadata yang ditentukan pengguna untuk mengidentifikasi tujuan atau properti objek.

Catatan penggunaan

  • Pada topik ini digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Kredensial akses pada topik ini diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Instans OSSClient pada topik ini dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Konfigurasi klien (Go SDK V1).

  • Untuk menyetel metadata objek, Anda harus memiliki izin oss:PutObject. Untuk mengambil metadata objek, Anda harus memiliki izin oss:GetObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.

Kode contoh

Setel metadata saat mengunggah objek

Peringatan

Saat menyetel metadata selama pengunggahan objek, pastikan tidak ada objek lain dengan nama yang sama di bucket tersebut. Jika ada, objek yang sudah ada akan ditimpa. Untuk informasi selengkapnya tentang cara mencegah penimpaan objek, lihat Cegah penimpaan objek.

package main

import (
	"log"
	"strings"
	"time"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Gagal membuat penyedia kredensial: %v", err)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke titik akhir bucket. Contohnya, untuk wilayah China (Hangzhou), setel titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan titik akhir yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Contohnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Gagal membuat klien OSS: %v", err)
	}

	// Tentukan nama bucket. Contoh: examplebucket.
	bucketName := "examplebucket" // Ganti dengan nama bucket aktual Anda.
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket: %v", err)
	}

	// Setel metadata objek. Contohnya, atur waktu kedaluwarsa ke pukul 23:00:00 GMT pada 10 Januari 2049, atur izin akses ke public-read, dan setel metadata kustom MyProp ke MyPropVal.
	expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
	options := []oss.Option{
		oss.Expires(expires),
		oss.ObjectACL(oss.ACLPublicRead),
		oss.Meta("MyProp", "MyPropVal"),
	}

	// Unggah objek dari aliran data.
	// Tentukan path lengkap objek. Path lengkap tidak mencakup nama bucket. Contoh: exampledir/exampleobject.txt.
	objectName := "exampledir/exampleobject.txt" // Ganti dengan path objek aktual Anda.
	err = bucket.PutObject(objectName, strings.NewReader("MyObjectValue"), options...)
	if err != nil {
		log.Fatalf("Gagal mengunggah objek: %v", err)
	}

	// Dapatkan metadata objek.
	props, err := bucket.GetObjectDetailedMeta(objectName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan metadata detail objek: %v", err)
	}
	log.Printf("Object Meta: %+v\n", props)
}

Modifikasi metadata objek yang sudah ada

...

// Modifikasi satu entri metadata sekaligus.
err = bucket.SetObjectMeta(objectName, oss.Meta("MyMeta", "MyMetaValue1"))
if err != nil {
	log.Fatalf("Gagal menyetel metadata tunggal: %v", err)
}

// Modifikasi beberapa entri metadata sekaligus.
options := []oss.Option{
	oss.Meta("MyMeta", "MyMetaValue2"),
	oss.Meta("MyObjectLocation", "HangZhou"),
}
err = bucket.SetObjectMeta(objectName, options...)
if err != nil {
	log.Fatalf("Gagal menyetel beberapa metadata: %v", err)
}

// Dapatkan metadata objek.
	props, err := bucket.GetObjectDetailedMeta(objectName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan metadata detail objek: %v", err)
	}
	log.Printf("Object Meta: %+v\n", props)

Dapatkan metadata objek

...

// Dapatkan metadata objek.
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
	log.Fatalf("Gagal mendapatkan metadata detail objek: %v", err)
}
log.Printf("Object Meta: %+v\n", props)

FAQ

Bagaimana cara mencegah objek ditimpa oleh objek lain dengan nama yang sama?

Untuk mencegah objek ditimpa oleh objek lain dengan nama yang sama, gunakan salah satu metode berikut:

  • Aktifkan Pengendalian versi

    Setelah Anda mengaktifkan Pengendalian versi, objek yang ditimpa akan disimpan sebagai versi sebelumnya di bucket. Anda dapat memulihkan versi sebelumnya kapan saja. Untuk informasi selengkapnya, lihat Aktifkan Pengendalian versi.

  • Sertakan parameter dalam permintaan unggah untuk mencegah penimpaan

    Sertakan parameter x-oss-forbid-overwrite di Header permintaan unggah dan atur nilainya ke true. Jika Anda mengunggah objek yang memiliki nama sama dengan objek yang sudah ada di bucket, proses unggah akan gagal dan error FileAlreadyExists dikembalikan. Untuk informasi selengkapnya, lihat PutObject.

Referensi

  • Untuk kode contoh lengkap mengenai metadata objek, lihat contoh di GitHub.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk menyetel metadata objek selama unggah simple, lihat PutObject.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk memodifikasi metadata objek yang sudah ada, lihat CopyObject.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk mengambil metadata objek, lihat GetObjectMeta.