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 tamanho máximo permitido será de 5 GB.
Ao modificar o método de criptografia ou a classe de armazenamento do objeto durante a operação de cópia, o limite de tamanho será de 1 GB. Para objetos maiores que 1 GB nessas condições, 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:
Sem alterações no método de criptografia ou na classe de armazenamento, o OSS modifica apenas os metadados do objeto, sem copiar seu conteúdo.
Caso haja mudança 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 referenciado pelo link simbólico não é transferido.
-
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
Se você ativar a opção Prevent File Overwrite, não será possível usar o CopyObject para alterar a classe de armazenamento de um arquivo, como de Standard para Archive Storage. Nesse caso, prefira a conversão automática por ciclo de vida.
Permissões
Uma conta Alibaba Cloud possui permissões totais por padrão. Usuários RAM ou funções RAM vinculados a essa conta não têm nenhuma permissão inicialmente. A conta Alibaba Cloud ou o administrador deve conceder as permissões operacionais necessárias por meio de políticas do RAM 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 quando se especifica a versão do objeto de origem via versionId. |
|
|
|
Obrigatórias ao copiar tags de objetos por meio de x-oss-tagging. |
|
|
|
||
|
|
Também requerida caso você especifique as tags de uma versão específica do objeto de origem usando versionId. |
|
|
|
Essas duas permissões são obrigatórias quando os metadados do objeto de destino contêm 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 com a operação 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, haverá cobrança referente a 20 dias de armazenamento IA, pois a duração mínima não foi atingida. Para mais detalhes sobre taxas de armazenamento, consulte Taxas de armazenamento.
Ao chamar a operação CopyObject, se o objeto de origem for do tipo IA, incorre-se em taxa de recuperação de dados de armazenamento IA. Se o objeto de origem for Archive Storage, ainda não restaurado via RestoreObject, e o acesso em tempo real a objetos Archive estiver 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. Consulte Taxas de processamento de dados para mais informações 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 um objeto de destino existente com o mesmo nome deve ser sobrescrito. Se o versionamento estiver ativado ou suspenso no bucket de destino, o cabeçalho de requisição x-oss-forbid-overwrite torna-se inválido, permitindo a sobrescrita de objetos com nomes iguais.
Configurar o cabeçalho de requisição x-oss-forbid-overwrite reduz o desempenho de processamento QPS. Para utilizar esse cabeçalho em muitas operações (QPS > 1000), entre em contato com o suporte técnico para evitar 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 operação de 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 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 apenas 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 somente se a data informada for anterior à data real de modificação do objeto. Valor padrão: nenhum |
|
x-oss-metadata-directive |
String |
Não |
COPY |
Determina como definir os metadados do objeto de destino.
Importante
Se os objetos de origem e destino forem idênticos e o versionamento não estiver ativado, os metadados do objeto de origem serão ignorados independentemente do valor de x-oss-metadata-directive. O objeto de destino usará os metadados definidos na requisição. |
|
x-oss-server-side-encryption |
String |
Não |
AES256 |
Define o algoritmo de criptografia server-side que o OSS usa 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. O algoritmo de criptografia KMS só pode ser usado após a aquisição de 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**** |
Especifica a chave mestra do cliente (CMK) gerenciada pelo KMS. Este parâmetro é válido apenas quando x-oss-server-side-encryption está definido como KMS. |
|
x-oss-object-acl |
String |
Não |
private |
Define as permissões de acesso do objeto de destino no momento de sua criação no OSS. Valores válidos:
Para mais informações sobre permissões de acesso, consulte ACL de objeto. |
|
x-oss-storage-class |
String |
Não |
Standard |
Especifica a classe de armazenamento do objeto. Em buckets de qualquer classe de armazenamento, se este cabeçalho for definido durante o upload, o objeto será armazenado na classe indicada. Por exemplo, ao configurar x-oss-storage-class como Standard ao enviar um objeto para um bucket IA, ele será salvo como Standard. Valores válidos:
Para mais detalhes sobre classes de armazenamento, consulte 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
Chave e valor devem ser codificados em URL. Se um item não contiver o sinal de igual (=), o valor será tratado como string vazia. |
|
x-oss-tagging-directive |
String |
Não |
Copy |
Determina como configurar as tags do objeto de destino. Valores válidos:
|
Esta operação também utiliza cabeçalhos de requisição comuns, como Host e Date. Para mais informações, consulte Cabeçalhos de requisição comuns.
Cabeçalhos de resposta
Esta operação utiliza apenas cabeçalhos de resposta comuns. Consulte Cabeçalhos de resposta comuns para mais detalhes.
Elementos de 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
Requisição de exemplo
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: 0Resposta de exemplo
x-oss-hash-crc64ecmaindica o valor CRC de 64 bits do objeto. Esse valor é 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
Requisição de exemplo
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-objectResposta de exemplo
Neste exemplo,
x-oss-copy-source-version-idrepresenta o ID de versão do objeto de origem, correspondendo neste caso à versão atual. Jáx-oss-version-idindica o 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 o ID de versão
Requisição de exemplo
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****Resposta de exemplo
Neste cenário,
x-oss-copy-source-version-idrefere-se ao ID de versão do objeto de origem, conforme especificado no cabeçalho de requisiçãox-oss-copy-source. O campox-oss-version-idcontém 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
Para o comando ossutil correspondente à operação CopyObject, consulte copy-object.
Códigos de erro
|
Código de erro |
Código de status HTTP |
Descrição |
|
InvalidArgument |
400 |
O valor de um parâmetro, como x-oss-storage-class, é inválido. |
|
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 retornado devido a uma das razões abaixo:
|
|
FileImmutable |
409 |
Erro retornado ao tentar excluir ou modificar dados em um bucket que se encontra em estado protegido. |
Perguntas frequentes
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. Para mais informações, consulte cp (copiar arquivos).