Varsayılan olarak, mevcut bir nesneyle aynı ada sahip bir nesne yüklediğinizde yüklenen nesne mevcut nesnenin üzerine yazar. Bu konu, nesneleri kopyalarken veya basit yükleme ya da çok parçalı yükleme yaparken aynı ada sahip nesnelerin mevcut nesnelerin üzerine yazılmasını önlemek için x-oss-forbid-overwrite istek üst bilgisinin nasıl yapılandırılacağını açıklar.
Notlar
Bu konuda Çin (Hangzhou) bölgesinin genel uç noktası kullanılır. OSS ile aynı bölgedeki diğer Alibaba Cloud hizmetlerinden OSS'ye erişmek için dahili uç nokta kullanın. OSS bölgeleri ve uç noktaları hakkında daha fazla bilgi için bkz. Bölgeler ve uç noktalar.
Bu konuda erişim kimlik bilgileri ortam değişkenlerinden alınır. Erişim kimlik bilgilerinin nasıl yapılandırılacağı hakkında daha fazla bilgi için bkz. Erişim kimlik bilgilerini yapılandırma.
Bu konuda bir OSS uç noktası kullanarak
OSSClientörneği oluşturma işlemi gösterilir. Özel etki alanı kullanma veya Security Token Service (STS) kimlik bilgileriyle kimlik doğrulama gibi alternatif yapılandırmalar için bkz. Bir istemci yapılandırma (Go SDK V1).
Örnek kod
Aşağıdaki örnek kod, basit yükleme sırasında aynı ada sahip nesnelerin mevcut nesnelerin üzerine yazılmasını nasıl önleyeceğinizi gösterir:
package main
import (
"log"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// Specify the name of your bucket.
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
}
// Specify whether to overwrite an existing object with the same name.
// By default, if you do not specify oss.ForbidOverWrite, an object that has the same name is overwritten.
// If you set oss.ForbidOverWrite to false, an object that has the same name is overwritten.
// If you set oss.ForbidOverWrite to true, an object that has the same name is not overwritten. If such an object exists, an error is reported.
forbidWrite := oss.ForbidOverWrite(true)
// Upload the string.
// Specify the full path of the object. Do not include the bucket name in the full path.
objectName := "yourObjectName"
objectValue := "yourObjectValue"
err = bucket.PutObject(objectName, strings.NewReader(objectValue), forbidWrite)
if err != nil {
log.Fatalf("Failed to upload object '%s': %v", objectName, err)
}
log.Printf("Successfully uploaded object '%s' with value '%s'", objectName, objectValue)
}
Yaygın senaryolar
Nesne kopyalama görevinde üzerine yazmayı önleme
Çok parçalı yükleme görevinde üzerine yazmayı önleme
Başvurular
Basit yükleme yapmak için çağırabileceğiniz API işlemi hakkında daha fazla bilgi için bkz. PutObject.
Bir nesneyi kopyalamak için çağırabileceğiniz API işlemi hakkında daha fazla bilgi için bkz. CopyObject.
Çok parçalı yükleme yapmak için çağırabileceğiniz API işlemleri hakkında daha fazla bilgi için bkz. InitiateMultipartUpload ve CompleteMultipartUpload.