Por padrão, ao fazer upload de um objeto com o mesmo nome de um objeto existente, o sistema sobrescreve o objeto existente. Este tópico descreve como configurar o cabeçalho de requisição x-oss-forbid-overwrite para impedir a sobrescrita de objetos existentes por objetos com o mesmo nome ao copiar objetos ou realizar upload simples ou upload multipart.
Observações
Neste tópico, utiliza-se o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para mais informações sobre regiões e endpoints do OSS, consulte Regions and endpoints.
Neste tópico, as credenciais de acesso são obtidas de variáveis de ambiente. Para mais informações sobre como configurar credenciais de acesso, consulte Configure access credentials.
Este tópico demonstra como criar uma instância OSSClient usando um endpoint do OSS. Para configurações alternativas, como uso de domínio personalizado ou autenticação com credenciais do Security Token Service (STS), consulte Configure a client (Go SDK V1).
Código de exemplo
O código de exemplo a seguir mostra como impedir a sobrescrita de objetos existentes por objetos com o mesmo nome durante um upload simples:
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)
}
Cenários comuns
Evitar sobrescrita em uma tarefa de cópia de objetos
Evitar sobrescrita em uma tarefa de upload multipart
Referências
Para mais informações sobre a operação de API de upload simples, consulte PutObject.
Para detalhes sobre a operação de API de cópia de objetos, consulte CopyObject.
Para informações sobre as operações de API de upload multipart, consulte InitiateMultipartUpload e CompleteMultipartUpload.