Faz o upload de um objeto anexando dados. Os objetos criados com AppendObject são do tipo Appendable, enquanto os objetos enviados com PutObject são do tipo Normal.
Versionamento
Quando o versionamento está ativado ou suspenso para um bucket, observe o seguinte comportamento para objetos Appendable:
-
É possível anexar dados apenas à versão atual de um objeto Appendable. O OSS não cria versões anteriores para esse objeto.
Uma operação PutObject ou DeleteObject na versão atual salva o objeto Appendable como uma versão anterior. Após isso, não é mais possível anexar dados ao objeto.
A operação AppendObject não pode ser executada em objetos que não sejam do tipo Appendable, como objetos Normal ou marcadores de exclusão.
Uma nova versão Appendable só pode ser criada quando o objeto não existe ou quando a versão mais recente é um marcador de exclusão. Defina
positioncomo 0.
Limites
O tamanho máximo de um objeto Appendable é de 5 GB.
Não é possível usar a operação AppendObject em objetos protegidos por uma política de retenção.
Objetos Appendable não suportam criptografia no lado do servidor com CMK ID por meio do KMS.
O desempenho de download de objetos Appendable é significativamente inferior ao de objetos Normal ou Multipart. Avalie se esse comportamento atende aos seus requisitos.
Permissões
Por padrão, uma conta Alibaba Cloud possui permissões totais. Usuários RAM ou funções RAM vinculados a uma conta Alibaba Cloud não têm nenhuma permissão por padrão. A conta Alibaba Cloud ou o administrador da conta deve conceder as permissões de operação por meio de políticas do RAM ou Bucket Policy.
|
API |
Action |
Descrição |
|
AppendObject |
|
Use esta operação para fazer o upload de um objeto anexando-o a um objeto existente. |
|
|
Ao fazer o upload de um objeto anexando-o a um objeto existente, essa permissão será necessária caso você especifique tags de objeto por meio de x-oss-tagging. |
Sintaxe da solicitação
POST /ObjectName?append&position=Position HTTP/1.1
Content-Length: ContentLength
Content-Type: ContentType
Host: BucketName.oss.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Cabeçalhos da solicitação
|
Nome |
Tipo |
Obrigatório |
Exemplo |
Descrição |
|
Cache-control |
string |
Não |
no-cache |
Comportamento de cache da página web para o objeto. Definido na RFC2616. Padrão: nenhum |
|
Content-Disposition |
string |
Não |
attachment;filename=oss_download.jpg |
Nome do objeto durante o download. Definido na RFC2616. Padrão: nenhum |
|
Content-MD5 |
string |
Não |
ohhnqLBJFiKkPSBO1eNaUA== |
Hash MD5 codificado em Base64 usado para verificar a integridade do corpo da mensagem. Calcule o hash MD5 do corpo da mensagem (excluindo cabeçalhos) para gerar um valor de 128 bits e, em seguida, codifique-o em Base64. Padrão: nenhum Restrições: nenhuma |
|
Expires |
string |
Não |
Wed, 08 Jul 2015 16:57:01 GMT |
Tempo de expiração. Definido na RFC2616. Padrão: nenhum |
|
x-oss-server-side-encryption |
string |
Não |
AES256 |
Método de criptografia no lado do servidor. Valores válidos:
|
|
x-oss-object-acl |
string |
Não |
private |
ACL do objeto. Valores válidos:
As permissões de acesso estão descritas em ACL de objeto. |
|
x-oss-storage-class |
string |
Não |
Standard |
Classe de armazenamento do objeto. Quando especificado, o objeto é armazenado nesta classe independentemente da classe de armazenamento do bucket. Por exemplo, definir x-oss-storage-class como Standard em um bucket IA armazena o objeto como Standard. Valores válidos:
Mais detalhes disponíveis em Classes de armazenamento. Importante
|
|
x-oss-meta-* |
string |
Não |
x-oss-meta-location |
Cabeçalhos de metadados personalizados. Aplica-se apenas à primeira operação de anexo. Parâmetros com o prefixo x-oss-meta-* são armazenados como metadados do objeto. Limite de tamanho: O total de metadados não pode exceder 8 KB. Regras de nomenclatura: Apenas hífens (-), dígitos e letras minúsculas (a-z) são permitidos. Letras maiúsculas são convertidas para minúsculas. Underscores (_) não são suportados. |
|
x-oss-tagging |
string |
Não |
TagA=A |
Tags de objeto no formato chave-valor. Múltiplas tags são separadas por e comercial (&), como em Importante
|
Esta operação também suporta Cabeçalhos comuns de solicitação.
Parâmetros da solicitação
Os parâmetros append e position fazem parte do CanonicalizedResource e devem ser incluídos na assinatura.
|
Nome |
Tipo |
Obrigatório |
Exemplo |
Descrição |
|
append |
string |
Sim |
Não aplicável |
Indica uma operação AppendObject. Cada chamada atualiza a hora da última modificação do objeto. |
|
position |
string |
Sim |
0 |
O deslocamento em bytes a partir do qual iniciar o anexo. Após cada operação bem-sucedida, x-oss-next-append-position indica a próxima posição. O primeiro anexo deve definir position como 0. Anexos subsequentes devem definir position como o tamanho atual do objeto. Por exemplo, se o primeiro anexo tiver content-length 65536, o segundo deve definir position como 65536.
|
Cabeçalhos da resposta
|
Cabeçalho da resposta |
Tipo |
Exemplo |
Descrição |
|
x-oss-next-append-position |
Inteiro de 64 bits |
1717 |
Posição para o próximo anexo, igual ao tamanho atual do objeto. Retornado em caso de sucesso ou quando ocorre um erro 409 devido a incompatibilidade de posição. |
|
x-oss-hash-crc64ecma |
Inteiro de 64 bits |
3231342946509354535 |
Valor CRC de 64 bits do objeto, calculado conforme o padrão CRC-64/XZ. |
Esta operação também suporta Cabeçalhos comuns de resposta.
Cálculo CRC-64
Métodos de cálculo suportados:
-
Cálculo usando o módulo Boost CRC
typedef boost::crc_optimal<64, 0x42F0E1EBA9EA3693ULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, true, true> boost_ecma; uint64_t do_boost_crc(const char* buffer, int length) { boost_ecma crc; crc.process_bytes(buffer, length); return crc.checksum(); } -
Cálculo usando crcmod do Python
import crcmod do_crc64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693, initCrc=0, xorOut=0xffffffffffffffff, rev=True) print(do_crc64(b"123456789"))
Operações relacionadas
|
Outra operação |
Descrição da relação |
|
Executar PutObject em um objeto Appendable existente sobrescreve o objeto e altera seu tipo para Normal. |
|
|
Executar HeadObject em um objeto Appendable retorna x-oss-next-append-position, x-oss-hash-crc64ecma e x-oss-object-type (definido como Appendable). |
|
|
GetBucket lista objetos Appendable com Type definido como Appendable. |
Exemplos
-
Exemplo de solicitação
POST /oss.jpg?append&position=0 HTTP/1.1 Host: oss-example.oss.aliyuncs.com Cache-control: no-cache Expires: Wed, 08 Jul 2015 16:57:01 GMT x-oss-storage-class: Archive Content-Disposition: attachment;filename=oss_download.jpg Date: Wed, 08 Jul 2015 06:57:01 GMT Content-Type: image/jpg Content-Length: 1717 Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-disposition;content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e [1717 bytes of object data]Exemplo de resposta
HTTP/1.1 200 OK Date: Wed, 08 Jul 2015 06:57:01 GMT ETag: "0F7230CAA4BE94CCBDC99C550000****" Connection: keep-alive Content-Length: 0 Server: AliyunOSS x-oss-hash-crc64ecma: 14741617095266562575 x-oss-next-append-position: 1717 x-oss-request-id: 559CC9BDC755F95A6448**** -
Exemplo de solicitação com versionamento
Quando o versionamento está ativado, a resposta do AppendObject inclui x-oss-version-id, que especifica o ID da versão do objeto atual.
POST /example?append&position=0 HTTP/1.1 Host: versioning-append.oss.aliyuncs.com Date: Tue, 09 Apr 2019 03:59:33 GMT Content-Length: 3 Content-Type: application/octet-stream Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218eExemplo de resposta
HTTP/1.1 200 OK Date: Tue, 09 Apr 2019 03:59:33 GMT ETag: "2776271A4A09D82CA518AC5C0000****" Connection: keep-alive Content-Length: 0 Server: AliyunOSS x-oss-version-id: CAEQGhiBgIC_k6aV5RgiIGI3YTY2ZmMzYWJlMzQ3YjM4YTljOTk5YjUyZGF**** x-oss-hash-crc64ecma: 3231342946509354535 x-oss-next-append-position: 47 x-oss-request-id: 5CAC18A5B7AEADE01700****
SDKs
SDKs para esta operação:
Interface de linha de comando ossutil
Use o comando append-object no ossutil.
Códigos de erro
|
Código de erro |
Código de status HTTP |
Descrição |
|
ObjectNotAppendable |
409 |
AppendObject foi chamado em um objeto que não é do tipo Appendable. |
|
PositionNotEqualToLength |
409 |
|
|
InvalidArgument |
400 |
Os valores de parâmetros como x-oss-storage-class e x-oss-object-acl são inválidos. |
|
FileImmutable |
409 |
O bucket está em estado protegido e não permite exclusão ou modificação. |
|
KmsServiceNotEnabled |
403 |
A criptografia KMS foi especificada, mas o Key Management Service (KMS) não está ativado no console. |