Todos os produtos
Search
Central de documentação

Object Storage Service:CopyObject

Última atualização: Sep 12, 2026

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

oss:GetObject

Copia objetos dentro de um bucket ou entre buckets na mesma região.

oss:PutObject

oss:GetObjectVersion

Necessária também ao especificar a versão do objeto de origem via versionId.

oss:GetObjectTagging

Obrigatórias ao copiar tags de objetos usando x-oss-tagging.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Exigida adicionalmente caso especifique as tags de uma versão específica do objeto de origem através de versionId.

kms:GenerateDataKey

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.

kms:Decrypt

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.

  • A ausência de x-oss-forbid-overwrite ou sua definição como false permite sobrescrever um objeto de destino com o mesmo nome.

  • Definir x-oss-forbid-overwrite como true impede a sobrescrita de um objeto de destino existente com o mesmo nome.

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.

  • COPY (padrão): Replica os metadados do objeto de origem para o destino.

    O OSS não copia a propriedade x-oss-server-side-encryption do objeto de origem para o destino. O método de criptografia server-side do objeto de destino depende da especificação de x-oss-server-side-encryption na operação de cópia.

  • REPLACE: Ignora os metadados do objeto de origem e utiliza aqueles especificados na requisição.

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.

  • Sem a especificação de x-oss-server-side-encryption na cópia, o objeto de destino não recebe criptografia server-side, mesmo que a origem estivesse criptografada.

  • Incluir x-oss-server-side-encryption na operação garante a criptografia server-side do destino, independente da criptografia da origem. O cabeçalho de resposta incluirá x-oss-server-side-encryption com o algoritmo utilizado no objeto de destino.

    Durante o download do objeto de destino, a resposta também conterá x-oss-server-side-encryption indicando o algoritmo de criptografia aplicado.

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:

  • default (padrão): O objeto herda as permissões do bucket.

  • private: Recurso privado. Apenas o proprietário e usuários autorizados possuem permissão de leitura e escrita. Outros usuários não têm acesso.

  • public-read: Recurso de leitura pública. Proprietário e autorizados leem e escrevem; demais usuários têm apenas permissão de leitura. Use com cautela.

  • public-read-write: Recurso público de leitura e escrita. Todos os usuários podem ler e escrever no objeto. Utilize esta permissão com cuidado.

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:

  • Standard (padrão): Standard

  • IA: Infrequent Access

  • Archive: Archive Storage

  • ColdArchive: Cold Archive

  • DeepColdArchive: Deep Cold Archive

    Importante

    Copiar muitos arquivos definindo diretamente Deep Cold Archive como classe de armazenamento gera altas taxas para requisições PUT. Recomendamos usar uma lifecycle rule para transicionar os arquivos para a classe Deep Cold Archive e reduzir custos com requisições PUT.

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:

  • Copy (padrão): Duplica as tags do objeto de origem para o destino.

  • Replace: Desconsidera as tags da origem e aplica aquelas informadas na requisição.

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: 0

    Exemplo de resposta

    x-oss-hash-crc64ecma indica 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-object

    Exemplo de resposta

    Neste exemplo, x-oss-copy-source-version-id representa o ID de versão do objeto de origem (neste caso, a versão atual). Já x-oss-version-id corresponde 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-id refere-se ao ID da versão do objeto de origem, conforme especificado no cabeçalho x-oss-copy-source. O campo x-oss-version-id indica 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:

  • Cabeçalho x-oss-copy-source-if-match presente, mas o ETag do objeto de origem difere do ETag fornecido.

  • Cabeçalho x-oss-copy-source-if-unmodified-since especificado, porém a hora informada é anterior à modificação real do objeto.

Not Modified

304

Este erro ocorre nas seguintes situações:

  • Uso do cabeçalho x-oss-copy-source-if-none-match, mas o ETag do objeto de origem coincide com o ETag informado.

  • Presença do cabeçalho x-oss-copy-source-if-modified-since, contudo o objeto de origem não sofreu modificações desde a data especificada.

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:

  • A requisição inclui x-oss-forbid-overwrite=true para evitar sobrescrita, mas já existe um objeto com o mesmo nome no bucket.

  • O recurso de namespace hierárquico está ativo no bucket e houve tentativa de copiar um objeto cuja origem ou destino é um diretório.

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.