Chame a operação AppendObject para acrescentar conteúdo a objetos anexáveis existentes.
Observações
Este tópico utiliza 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, utilize um endpoint interno. Para mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.
As credenciais de acesso neste exemplo são obtidas de variáveis de ambiente. Para saber como configurar credenciais de acesso, consulte Configurar credenciais de acesso.
Este tópico demonstra a criação de uma instância OSSClient com 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 Configurar um cliente (Go SDK V1).
Caso o objeto de destino não exista, a operação AppendObject cria um novo objeto anexável.
-
Se o objeto de destino já existir:
Quando o objeto for anexável e a posição inicial especificada for igual ao tamanho atual do objeto, os dados serão adicionados ao final dele.
Quando o objeto for anexável, mas a posição inicial especificada diferir do tamanho atual, o erro PositionNotEqualToLength será retornado.
Se o objeto não for do tipo anexável, o sistema retorna o erro ObjectNotAppendable.
Permissões
Por padrão, uma conta Alibaba Cloud possui permissões totais. Usuários RAM ou funções RAM vinculados a essa conta não têm nenhuma permissão inicialmente. O administrador ou a própria conta Alibaba Cloud deve conceder as permissões operacionais necessárias por meio de políticas do RAM ou Bucket Policy.
|
API |
Ação |
Descrição |
|
AppendObject |
|
Utilize esta operação para fazer upload de um objeto acrescentando-o a um objeto existente. |
|
|
Necessária quando tags de objeto são especificadas via x-oss-tagging durante o upload por acréscimo. |
Código de exemplo
O código abaixo ilustra como realizar um upload por acréscimo:
package main
import (
"log"
"strings"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create an OSSClient instance.
// Set yourEndpoint to the Endpoint of the bucket. For example, for the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, use the actual Endpoint.
// Set yourRegion to the region where the bucket is located. For example, for the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, use the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Set the signature version.
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 bucket name, for example, examplebucket.
bucketName := "examplebucket" // Replace with the actual bucket name.
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// Specify the full path of the object. Do not include the bucket name. For example, appendobject.txt.
objectName := "appendobject.txt"
var nextPos int64 = 0
// Specify the expiration time.
expires := time.Date(2025, time.December, 10, 23, 0, 0, 0, time.UTC)
options := []oss.Option{
oss.Expires(expires),
}
// The position for the first append upload is 0. The return value is the position for the next append upload.
appendValue1 := "YourObjectAppendValue1"
nextPos, err = bucket.AppendObject(objectName, strings.NewReader(appendValue1), nextPos, options...)
if err != nil {
log.Fatalf("Failed to append first value: %v", err)
}
// Perform the second append upload.
appendValue2 := "YourObjectAppendValue2"
nextPos, err = bucket.AppendObject(objectName, strings.NewReader(appendValue2), nextPos)
if err != nil {
log.Fatalf("Failed to append second value: %v", err)
}
log.Println("Append uploads completed successfully.")
}
Perguntas frequentes
Referências
Para acessar o código completo de exemplo sobre uploads por acréscimo, consulte o exemplo no GitHub.
Para mais detalhes sobre a operação de API AppendObject, consulte AppendObject.