Secara default, objek baru akan menimpa objek yang sudah ada dengan nama yang sama jika Anda memiliki izin akses yang diperlukan. Topik ini menjelaskan cara mencegah perilaku tersebut dengan mengatur header permintaan x-oss-forbid-overwrite untuk unggah simple, salinan objek, dan unggah multi-bagian.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di 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).
Kode contoh
Kode berikut menunjukkan cara mencegah objek dengan nama yang sama agar tidak ditimpa selama unggah simple:
package main
import (
"log"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Gagal membuat penyedia kredensial: %v", err)
}
// Buat instans OSSClient.
// Atur yourEndpoint ke titik akhir wilayah bucket. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan titik akhir yang sesuai.
// Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Atur 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)
}
// Atur yourBucketName ke nama bucket.
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Gagal mendapatkan bucket '%s': %v", bucketName, err)
}
// Tentukan apakah objek dengan nama yang sama boleh ditimpa.
// Jika Anda tidak menentukan oss.ForbidOverWrite, objek dengan nama yang sama akan ditimpa secara default.
// Jika Anda mengatur oss.ForbidOverWrite ke false, objek dengan nama yang sama akan ditimpa.
// Jika Anda mengatur oss.ForbidOverWrite ke true, objek dengan nama yang sama tidak akan ditimpa. Jika objek dengan nama yang sama sudah ada, program akan melaporkan error.
forbidWrite := oss.ForbidOverWrite(true)
// Unggah string.
// Atur yourObjectName ke path lengkap objek. Jangan sertakan nama bucket dalam path lengkap tersebut.
objectName := "yourObjectName"
objectValue := "yourObjectValue"
err = bucket.PutObject(objectName, strings.NewReader(objectValue), forbidWrite)
if err != nil {
log.Fatalf("Gagal mengunggah objek '%s': %v", objectName, err)
}
log.Printf("Berhasil mengunggah objek '%s' dengan nilai '%s'", objectName, objectValue)
}
Skema umum
Referensi
Untuk informasi selengkapnya mengenai operasi API untuk unggah simple, lihat PutObject.
Untuk informasi selengkapnya mengenai operasi API untuk menyalin objek, lihat CopyObject.
Untuk informasi selengkapnya mengenai operasi API untuk unggah multi-bagian, lihat InitiateMultipartUpload dan CompleteMultipartUpload.