Chame a operação AppendObject para adicionar conteúdo a objetos appendable existentes.
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 Alibaba Cloud na mesma região do OSS, 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 configure credenciais de acesso, consulte Configure access credentials.
Este tópico demonstra como crie uma instância OSSClient com um endpoint do oss. Para configurações alternativas, como usar um domínio personalizado ou autenticar com credenciais do Security Token service (STS), consulte Configure a client (Go SDK V1).
Se o objeto ao qual você deseja adicionar conteúdo não existir, a operação AppendObject cria um objeto appendable.
-
Se o objeto ao qual você deseja adicionar conteúdo já existir:
Caso o objeto seja appendable e a posição especificada para início da operação de append seja igual ao tamanho atual do objeto, os dados são adicionados ao final do objeto.
Caso o objeto seja appendable e a posição especificada para início da operação de append não seja igual ao tamanho atual do objeto, o sistema retorna o erro PositionNotEqualToLength.
Se o objeto não for appendable, o sistema retorna o erro ObjectNotAppendable.
Permissões
Por padrão, uma conta Alibaba Cloud possui permissões completas. Usuários RAM ou funções RAM vinculados a uma conta Alibaba Cloud não possuem nenhuma permissão por padrão. A conta Alibaba Cloud ou o administrador da conta deve conceder permissões de operação por meio de RAM policies ou Bucket Policy.
|
API |
Action |
Descrição |
|
AppendObject |
|
Permite fazer upload de um objeto adicionando-o a um objeto existente. |
|
|
Ao fazer upload de um objeto por meio de append a um objeto existente, essa permissão será necessária se você especifique tags de objeto por meio de x-oss-tagging. |
Código de exemplo
O código a seguir mostra como execute um append upload:
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 obter o código de exemplo completo de append uploads, consulte o exemplo no GitHub.
Para mais informações sobre a operação de API AppendObject, consulte AppendObject.