Use a operação CopyObject para copiar um objeto entre buckets iguais ou diferentes na mesma região.
Versionamento
Por padrão, x-oss-copy-source copia a versão atual de um objeto. Para copiar uma versão específica, inclua o ID da versão em x-oss-copy-source. Se a versão de origem especificada for um marcador de exclusão, o OSS retornará um erro 404, indicando que o objeto não existe.
Restaure uma versão anterior de um objeto como a versão atual copiando-a para o mesmo bucket. O OSS definirá essa versão anterior como a versão atual.
Se o versionamento estiver ativado no bucket de destino, o OSS gerará automaticamente um ID de versão exclusivo para o novo objeto copiado. Esse ID de versão é retornado no cabeçalho de resposta x-oss-version-id. Caso o versionamento esteja desativado ou suspenso no bucket de destino, o OSS gerará uma versão com ID nulo para o novo objeto. Essa nova versão substituirá qualquer versão existente que possua um ID de versão nulo.
Limites
-
Limites de tamanho do objeto
Quando os buckets de origem e destino são iguais e você não altera o método de criptografia nem a classe de armazenamento do objeto durante a cópia, o objeto pode ter mais de 5 GB.
Se os buckets de origem e destino forem diferentes e não houver alteração no método de criptografia ou na classe de armazenamento durante a cópia, o objeto não pode exceder 5 GB.
Ao modificar o método de criptografia ou a classe de armazenamento do objeto durante a operação de cópia, o tamanho máximo permitido é de 1 GB. Para objetos maiores que 1 GB, utilize a operação UploadPartCopy.
-
Permissões
As operações CopyObject e UploadPartCopy exigem permissões de leitura no objeto de origem.
-
Ao usar a operação CopyObject em um bucket com versionamento desativado, onde os objetos de origem e destino são idênticos:
Caso não haja mudança no método de criptografia ou na classe de armazenamento, o OSS modifica apenas os metadados do objeto, sem copiar seu conteúdo.
Se houver alteração no método de criptografia ou na classe de armazenamento, o OSS atualiza os metadados e também copia o conteúdo do objeto.
-
Objeto de origem é um link simbólico
Ao executar a operação CopyObject em um link simbólico, apenas o link é copiado. O conteúdo do arquivo apontado por esse link não é incluído na cópia.
-
Namespace hierárquico ativado no bucket
Não é possível copiar diretórios se o namespace hierárquico estiver ativado para o bucket.
-
Prevenção de conflitos de sobrescrita de arquivos
Com a ativação de Prevent File Overwrite, o CopyObject não permite alterar a classe de armazenamento de um arquivo (por exemplo, de Standard para Archive Storage). Utilize a conversão automática de ciclo de vida como alternativa.
Permissões
Uma conta Alibaba Cloud possui permissões completas por padrão. Usuários RAM ou funções RAM vinculados a essa conta não têm permissões iniciais. A conta Alibaba Cloud ou o administrador deve conceder as permissões operacionais necessárias por meio de RAM policies ou Bucket Policy.
|
API |
Action |
Descrição |
|
CopyObject |
|
Copia objetos dentro de um bucket ou entre buckets na mesma região. |
|
|
||
|
|
Necessária também ao especificar a versão do objeto de origem via versionId. |
|
|
|
Obrigatórias ao copiar tags de objetos usando x-oss-tagging. |
|
|
|
||
|
|
Exigida adicionalmente caso especifique as tags de uma versão específica do objeto de origem através de versionId. |
|
|
|
Ambas as permissões são necessárias se os metadados do objeto de destino contiverem X-Oss-Server-Side-Encryption: KMS durante a cópia. |
|
|
|
Faturamento
Cada chamada à operação CopyObject conta como uma requisição PUT para o bucket de destino.
A operação CopyObject aumenta o uso de armazenamento do bucket de destino.
Alterar a classe de armazenamento de um objeto via CopyObject envolve sobrescrita de dados. Por exemplo, se um objeto Infrequent Access (IA) for sobrescrito e tiver sua classe alterada para Standard dentro de 10 dias após a criação, será cobrada uma taxa referente a 20 dias de armazenamento IA, pois a duração mínima não foi atingida. Consulte Storage fees para mais detalhes sobre taxas de armazenamento.
Chamar a operação CopyObject gera taxa de recuperação de dados se o objeto de origem for do tipo IA. Caso o objeto de origem seja Archive Storage, ainda não restaurado via RestoreObject, e o acesso em tempo real a objetos Archive esteja ativado no bucket, aplica-se a taxa de recuperação para acesso em tempo real. Essas cobranças recaem sobre a conta proprietária do bucket de origem. Veja Data processing fees para informações detalhadas sobre faturamento.
Sintaxe da requisição
PUT /DestObjectName HTTP/1.1
Host: DestBucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectName
Cabeçalhos da requisição
Todos os cabeçalhos de requisição para uma operação de cópia começam com x-oss-. Portanto, adicione todos esses cabeçalhos à string de assinatura.
Nome | Tipo | Obrigatório | Valor | Descrição |
x-oss-forbid-overwrite | String | Não | true | Define se deve sobrescrever um objeto de destino existente com o mesmo nome. Se o versionamento estiver ativado ou suspenso no bucket de destino, o cabeçalho x-oss-forbid-overwrite torna-se inválido, permitindo a sobrescrita de objetos com nomes idênticos.
Configurar o cabeçalho x-oss-forbid-overwrite reduz o desempenho de processamento QPS. Para utilizar este cabeçalho em muitas operações (QPS > 1000), contate o suporte técnico e evite impactos no seu negócio. Valor padrão: false |
x-oss-copy-source | String | Sim | /oss-example/oss.jpg | Especifica o endereço de origem para a operação de cópia. Valor padrão: nenhum |
x-oss-copy-source-if-match | String | Não | 5B3C1A2E053D763E1B002CC607C5**** | A cópia ocorre e retorna 200 OK somente se o ETag do objeto de origem corresponder ao ETag fornecido. Valor padrão: nenhum |
x-oss-copy-source-if-none-match | String | Não | 5B3C1A2E053D763E1B002CC607C5**** | A operação de cópia é executada com retorno 200 OK apenas quando o ETag do objeto de origem diferir do ETag informado. Valor padrão: nenhum |
x-oss-copy-source-if-unmodified-since | String | Não | Mon, 11 May 2020 08:16:23 GMT | O objeto é copiado e 200 OK é retornado somente se a hora especificada for igual ou posterior à hora real de modificação do objeto. Valor padrão: nenhum |
x-oss-copy-source-if-modified-since | String | Não | Mon, 11 May 2020 08:16:23 GMT | A cópia do objeto acontece e retorna 200 OK apenas se o horário informado for anterior à última modificação real do objeto. Valor padrão: nenhum |
x-oss-metadata-directive | String | Não | COPY | Determina como definir os metadados do objeto de destino.
Importante Quando os objetos de origem e destino são idênticos e o versionamento está desativado, os metadados da origem são ignorados independentemente do valor de x-oss-metadata-directive. O objeto de destino adota os metadados definidos na requisição. |
x-oss-server-side-encryption | String | Não | AES256 | Define o algoritmo de criptografia server-side usado pelo OSS para criar o objeto de destino. Valores válidos: AES256 e KMS Importante Não é possível especificar x-oss-server-side-encryption ao copiar um objeto de link simbólico. Utilize o algoritmo de criptografia KMS somente após adquirir um pacote KMS. Caso contrário, o OSS retorna o erro KmsServiceNotEnabled.
|
x-oss-server-side-encryption-key-id | String | Não | 9468da86-3509-4f8d-a61e-6eab1eac**** | Indica a chave mestra do cliente (CMK) gerenciada pelo KMS. Este parâmetro só é válido quando x-oss-server-side-encryption estiver definido como KMS. |
x-oss-object-acl | String | Não | private | Estabelece as permissões de acesso do objeto de destino no momento de sua criação no OSS. Valores válidos:
Para mais detalhes sobre permissões de acesso, veja Object ACL. |
x-oss-storage-class | String | Não | Standard | Define a classe de armazenamento do objeto. Em buckets de qualquer classe, especificar este cabeçalho durante o upload armazena o objeto na classe indicada. Por exemplo, definir x-oss-storage-class como Standard ao enviar um arquivo para um bucket IA resulta em armazenamento como objeto Standard. Valores válidos:
Consulte Storage classes para saber mais sobre classes de armazenamento. |
x-oss-tagging | String | Não | a:1 | Define as tags do objeto. É possível especificar múltiplas tags simultaneamente, por exemplo, TagA=A&TagB=B. Nota Codifique chave e valor em URL. Itens sem sinal de igual (=) terão valor tratado como string vazia. |
x-oss-tagging-directive | String | Não | Copy | Controla como as tags do objeto de destino são configuradas. Valores válidos:
|
Esta operação também utiliza cabeçalhos comuns de requisição, como Host e Date. Consulte Common request headers para mais informações.
Cabeçalhos da resposta
Apenas cabeçalhos comuns de resposta são utilizados nesta operação. Veja Common response headers para detalhes.
Elementos da resposta
|
Nome |
Tipo |
Exemplo |
Descrição |
|
CopyObjectResult |
Container |
N/A |
Contêiner para os resultados da operação CopyObject. Valor padrão: nenhum |
|
ETag |
String |
5B3C1A2E053D763E1B002CC607C5**** |
ETag do objeto de destino. Elemento pai: CopyObjectResult |
|
LastModified |
String |
Fri, 24 Feb 2012 07:18:48 GMT |
Data da última atualização do objeto de destino. Elemento pai: CopyObjectResult |
Exemplos
-
Versionamento desativado
Exemplo de requisição
PUT /test%2FAK.txt HTTP/1.1 Host: tesx.oss-cn-zhangjiakou.aliyuncs.com Accept-Encoding: identity User-Agent: aliyun-sdk-python/2.6.0(Windows/7/AMD64;3.7.0) Accept: text/html Connection: keep-alive x-oss-copy-source: /test/AK.txt date: Fri, 28 Dec 2018 09:41:55 GMT authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e Content-Length: 0Exemplo de resposta
x-oss-hash-crc64ecmaindica o valor CRC de 64 bits do objeto, calculado conforme o padrão CRC-64/XZ. A operação CopyObject não garante que o objeto gerado possua um valor CRC de 64 bits.HTTP/1.1 200 OK Server: AliyunOSS Date: Fri, 28 Dec 2018 09:41:56 GMT Content-Type: application/xml Content-Length: 184 Connection: keep-alive x-oss-request-id: 5C25EFE4462CE00EC6D87156 ETag: "F2064A169EE92E9775EE5324D0B1****" x-oss-hash-crc64ecma: 12753002859196105360 x-oss-server-time: 150 <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"F2064A169EE92E9775EE5324D0B1****"</ETag> <LastModified>2018-12-28T09:41:56.000Z</LastModified> </CopyObjectResult> -
Copiar um objeto sem especificar ID de versão
Exemplo de requisição
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e x-oss-copy-source: /versioning-copy-source/source-objectExemplo de resposta
Neste exemplo,
x-oss-copy-source-version-idrepresenta o ID de versão do objeto de origem (neste caso, a versão atual). Jáx-oss-version-idcorresponde ao ID de versão do novo objeto copiado.HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgIC28uaA0BYiIDY5OGIwNmNlNjYyMTRjNTc4N2M2OGNiMjZkZTQ2**** x-oss-version-id: CAEQNxiBgIDG8uaA0BYiIGZhZDRkZTk5Zjg3YzRhNzdiMWEwZGViNDM1NTFh**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C81E728D9D4C2F636F067F89CC14****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult> -
Copiar um objeto especificando ID de versão
Exemplo de requisição
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e x-oss-copy-source: /versioning-copy-source/source-object?versionId=CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy****Exemplo de resposta
Aqui,
x-oss-copy-source-version-idrefere-se ao ID da versão do objeto de origem, conforme especificado no cabeçalhox-oss-copy-source. O campox-oss-version-idindica o ID de versão atribuído ao novo objeto copiado.HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy**** x-oss-version-id: CAEQNxiBgMDP8uaA0BYiIDIyNGNhZDQ1M2M3NzRkZThiNzE0N2I3ZDkxOWY4**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C4CA4238A0B923820DCC509A6F75****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult>
SDKs
Utilize os kits de desenvolvimento de software (SDKs) das linguagens abaixo para chamar esta operação.
Ferramenta de linha de comando ossutil
Consulte copy-object para visualizar o comando ossutil correspondente à operação CopyObject.
Códigos de erro
Código de erro | Código de status HTTP | Descrição |
InvalidArgument | 400 | Valor inválido para um parâmetro, como x-oss-storage-class. |
Precondition Failed | 412 | Erro retornado por um dos seguintes motivos:
|
Not Modified | 304 | Este erro ocorre nas seguintes situações:
|
KmsServiceNotEnabled | 403 | Você definiu x-oss-server-side-encryption como KMS, mas não adquiriu um pacote KMS. |
FileAlreadyExists | 409 | Erro gerado por uma das razões abaixo:
|
FileImmutable | 409 | Retornado ao tentar excluir ou modificar dados em um bucket que se encontra em estado protegido. |
FAQ
O CopyObject suporta cópia em lote de arquivos?
Não. A operação CopyObject serve para copiar um único arquivo. Para copiar vários arquivos em lote, utilize o ossutil. Consulte cp (copy files) para mais informações.