Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2022-11-14 GMT+08:00

Cópia de objetos

Funções

Você pode executar essa operação para criar uma cópia de um objeto existente no OBS.

Os usuários podem determinar se devem copiar os metadados do objeto de origem para o objeto de destino (por padrão) ou substituir os metadados do objeto de destino pelos metadados contidos na solicitação. A ACL do objeto de origem não é copiada para o objeto de destino. Por padrão, a ACL do objeto de destino é privada. Você pode definir uma ACL para o objeto de destino enviando uma solicitação de API.

A solicitação para copiar um objeto precisa levar as informações sobre o bucket e o objeto a serem copiados no campo do cabeçalho. O corpo da mensagem não pode ser transportado.

Esta operação suporta encriptação do lado do servidor.

O bucket de tamanho de objeto de destino é [0, 5 GB]. Se o tamanho do objeto de origem exceder 5 GB, você só poderá copiar alguns objetos usando a API Range.

Controle de versões

Por padrão, x-obs-copy-source especifica a versão mais recente do objeto de origem. Se a versão mais recente do objeto de origem tiver um marcador de exclusão, o objeto será considerado como tendo sido excluído. Você pode adicionar versionId para solicitar que o cabeçalho x-obs-copy-source copie um objeto com o ID de versão especificado.

Se um bucket tiver o versionamento ativado, o sistema gerará automaticamente um ID de versão exclusivo para o objeto solicitado nesse bucket e retornará o ID de versão no cabeçalho da resposta x-obs-version-id. Se o versionamento for suspenso para o bucket, a versão do objeto será null.

Quando o status de versionamento do bucket estiver desativado, se você fizer uma cópia de object_A e salvá-la como object_B, e um objeto nomeado como object_B já existir, o novo object_B substituirá o existente. Depois que a cópia for executada com êxito, somente o novo objeto_B poderá ser baixado porque o antigo objeto_B foi excluído. Portanto, antes de copiar um objeto, certifique-se de que não há nenhum objeto com o mesmo nome que a cópia do objeto para evitar que os dados sejam excluídos por engano. Durante a cópia, object_A não tem alterações.

Não é possível determinar se uma solicitação foi executada com sucesso usando apenas status_code no cabeçalho retornado pelo HTTP. Se 200 em status_code for retornado, o servidor recebeu a solicitação e começa a processar a solicitação. O corpo na resposta mostra se a solicitação foi executada com sucesso. A solicitação é executada com sucesso somente quando o corpo contém ETag; caso contrário, a solicitação não será executada.

Objetos de Archive do OBS

Se os objetos de origem forem objetos de Archive do OBS, verifique o status de restauração dos objetos. Você pode copiar esses objetos somente depois que eles forem restaurados. Se o objeto de origem não for recuperado ou estiver sendo recuperado, a cópia falhará e o erro 403 403 Forbidden será retornado. A falha é descrita da seguinte forma:

ErrorCode: InvalidObjectState

ErrorMessage: A operação não é válida para a classe de armazenamento do objeto de origem

Sintaxe da solicitação

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
PUT /destinationObjectName HTTP/1.1 
Host: bucketname.obs.region.myhuaweicloud.com 
x-obs-copy-source: /sourceBucket/sourceObject 
x-obs-metadata-directive: metadata_directive
x-obs-copy-source-if-match: etag
x-obs-copy-source-if-none-match: etag
x-obs-copy-source-if-unmodified-since: time_stamp
x-obs-copy-source-if-modified-since: time_stamp
Authorization: signature
Date: date

Parâmetros de solicitação

Esta solicitação não contém nenhum parâmetro.

Cabeçalhos de solicitação

Você pode adicionar cabeçalhos opcionais para especificar o objeto a ser copiado. Tabela 3 descreve os cabeçalhos opcionais.

Tabela 1 Cabeçalhos de solicitação

Cabeçalho

Descrição

Obrigatório

x-obs-acl

Ao copiar um objeto, você pode adicionar esse cabeçalho para definir a política de controle de permissão para o objeto. As políticas comuns predefinidas são as seguintes: private, public-read, public-read-write (Para obter detalhes sobre cada política, consulte a configuração ACL usando campos de cabeçalho na ACL.)

Tipo: string

Exemplo: x-obs-acl: acl

Não

x-obs-grant-read

Ao criar um objeto, você pode usar esse cabeçalho para autorizar todos os usuários em uma conta a permissão para ler objetos e obter metadados de objeto.

Tipo: string

Não

x-obs-grant-read-acp

Ao criar um objeto, você pode usar esse cabeçalho para autorizar todos os usuários em uma conta a permissão para obter a ACL do objeto.

Tipo: string

Não

x-obs-grant-write-acp

Ao criar um objeto, você pode usar esse cabeçalho para autorizar todos os usuários em uma conta a permissão para gravar a ACL do objeto.

Tipo: string

Não

x-obs-grant-full-control

Ao criar um objeto, você pode usar esse cabeçalho para autorizar todos os usuários em uma conta a permissão para ler o objeto, obter os metadados do objeto, obter a ACL do objeto e gravar a ACL do objeto.

Tipo: string

Não

x-obs-copy-source

Indica os nomes do bucket de origem e do objeto de origem. Se o objeto de origem tiver várias versões, o parâmetro versionId pode ser usado para especificar a versão desejada.

Tipo: string

Restrição: A codificação de URL é necessária para o manuseio de caracteres chineses.

Exemplo: x-obs-copy-source: /source_bucket/sourceObject

Sim

x-obs-metadata- directive

Indica se os metadados do objeto de destino são copiados do objeto de origem ou substituídos pelos metadados contidos na solicitação.

Tipo: string

Valores válidos: COPY and REPLACE

Valor padrão: COPY

Examplo: x-obs-metadata-directive: metadata_directive

Restrições: Valores diferentes de COPY or REPLACE resultam em uma resposta de erro imediata com base em 400. Se você precisar modificar os metadados (o mesmo para os objetos de origem e de destino), este parâmetro deve ser definido como REPLACE, caso contrário, a solicitação é inválida e o servidor retorna um erro de código de status HTTP 400. Este parâmetro não pode ser usado para alterar um objeto criptografado para um objeto não criptografado (o mesmo para os objetos de origem e de destino). Se você usar esse parâmetro para alterar o objeto criptografado, o sistema retornará 400.

Não

x-obs-copy-source-if-match

Copia o objeto de origem somente se sua ETag corresponder à especificada por este cabeçalho. Caso contrário, um erro de código de status HTTP 412 (condição prévia com falha) é retornado.

Tipo: string

Exemplo: x-obs-copy-source-if-match: etag

Restrição: Este parâmetro pode ser usado com x-obs-copy-source-if-unmodified-since, mas não com outros parâmetros de cópia condicional.

Não

x-obs-copy-source-if-none-match

Copia o objeto se sua tag de entidade (ETag) corresponder à tag especificada. Caso contrário, a solicitação retornará um erro de código de status HTTP 412 (condição prévia com falha).

Tipo: string

Exemplo: x-obs-copy-source-if-none-match: etag

Restrição: Este parâmetro pode ser usado com x-obs-copy-source-if-unmodified-since, mas não com outros parâmetros de cópia condicional.

Não

x-obs-copy-source-if-unmodified- since

Copia o objeto de origem somente se ele não tiver sido modificado desde o tempo especificado por este cabeçalho. Caso contrário, um erro de código de status HTTP 412 (condição prévia com falha) é retornado. Este cabeçalho pode ser usado com x-obs-copy-source-if-match, mas não pode ser usado com outros cabeçalhos de cópia condicional

Tipo: Cadeia de caracteres de tempo HTTP em conformidade com o formato especificado em http://www.ietf.org/rfc/rfc2616.txt

Exemplo: x-obs-copy-source-if-unmodified -since: time-stamp

Não

x-obs-copy-source-if-modified-since

Copia o objeto de origem somente se ele não tiver sido modificado desde o tempo especificado por este cabeçalho. Caso contrário, um erro de código de status HTTP 412 (condição prévia com falha) é retornado. Este cabeçalho pode ser usado com x-obs-copy-source-if-none-match, mas não pode ser usado com outros cabeçalhos de cópia condicional

Tipo: Cadeia de caracteres de tempo HTTP em conformidade com o formato especificado em http://www.ietf.org/rfc/rfc2616.txt

Exemplo: x-obs-copy-source-if-modified-since: time-stamp

Não

x-obs-storage-class

Ao copiar um objeto, você pode usar esse cabeçalho para especificar a classe de armazenamento do objeto. Se você não usar esse cabeçalho, a classe de armazenamento de objeto será a classe de armazenamento padrão do bucket de destino para o qual o objeto é copiado.

Tipo: string

O OBS fornece três classes de armazenamento: Padrão (STANDARD), Acesso Infrequente (WARM) e Arquivo (COLD). Portanto, os valores para este elemento podem ser STANDARD, WARM, e COLD. Esses valores são sensíveis a maiúsculas e minúsculas.

Exemplo: x-obs-storage-class: STANDARD

Não

x-obs-persistent-headers

Ao copiar um objeto, você pode adicionar o cabeçalho x-obs-persistent-headers em uma solicitação de HTTP para especificar um ou mais cabeçalhos de resposta definidos pelo usuário. Cabeçalhos de resposta definidos pelo usuário serão retornados no cabeçalho de resposta quando você recuperar o objeto de destino ou consultar os metadados do objeto de destino.

Tipo: string

Formato: x-obs-persistent-headers: key1:base64_encode(value1),key2:base64_encode(value2)...

Nota:: Itens, como key1 e key2, são cabeçalhos definidos pelo usuário. Se eles contiverem caracteres não-ASCII ou irreconhecíveis, eles podem ser codificados usando URL ou Base64. O servidor processa esses cabeçalhos como strings de caracteres, mas não os decodifica. Items, como value1 e value2 são os valores dos cabeçalhos correspondentes. base64_encode indica que o valor é codificado usando Base64. Um cabeçalho definido pelo usuário e seu valor codificado em Base64 são conectados usando um (:) de dois pontos para formar um par chave-valor. Todos os pares chave-valor são separados com uma vírgula (,) e são colocados no cabeçalho x-obs-persistent-headers. O servidor então decodifica o valor carregado.

Examplo: x-obs-persistent-headers: key1:dmFsdWUx,key2:dmFsdWUy

O cabeçalho retornado para baixar o objeto de destino ou obter os metadados do objeto de destino é key1:value1 ou key2:value2 respectivamente.

Restrições:

1. Cabeçalhos de resposta definidos pelo usuário especificados dessa maneira não podem ser prefixados com x-obs-, ou seja, você pode usar key1, em vez de x-obs-key1, como o prefixo.

2. O cabeçalho HTTP padrão, por exemplo, host/content-md5/origin/range/Content-Disposition, não pode ser usado.

3. O comprimento total do cabeçalho e dos metadados definidos pelo usuário não pode exceder 8 KB.

4. Se as mesmas chaves forem transferidas, separe os valores com vírgulas (,) e coloque esses valores na mesma chave para retornar.

5. Se o objeto de origem já tiver um cabeçalho de resposta definido pelo usuário, o cabeçalho de resposta não será copiado para o objeto de destino.

Não

x-obs-website-redirect-location

Se um bucket estiver configurado com a função de hospedagem de sites estáticos, ele redirecionará as solicitações desse objeto para outro objeto no mesmo bucket ou para um URL externo. O OBS armazena o valor desse cabeçalho nos metadados do objeto.

Tipo: string

Não há valor padrão.

Restrição: O valor deve ser prefixado por uma barra (/), http://, ou https://. O comprimento do valor não pode exceder 2 KB.

Não

x-obs-server-side-encryption

Indica que SSE-KMS é usado. Os objetos são criptografados usando SSE-KMS.

Tipo: string

Exemplo: x-obs-server-side-encryption:kms

Se algum processo é anormal: Esse cabeçalho é necessário quando o SSE-KMS é usado.

x-obs-server-side-encryption-kms-key-id

Indica o ID da chave mestra de um objeto criptografado. Este cabeçalho é usado no modo SSE-KMS. Se o cliente não fornecer o ID da chave mestra, o ID da chave mestra padrão será usado.

Tipo: string

Os dois formatos a seguir são suportados:

1. regionID:domainID:key/key_id

2. key_id

regionID é o ID da região à qual a chave pertence. domainID é o ID da conta do locatário ao qual a chave pertence. key_id é o ID da chave criado em DEW.

Exemplo:

1. x-obs-server-side-encryption-kms-key-id: region:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0 ou

2. x-obs-server-side-encryption-kms-key-id:4f1cd4de-ab64-4807-920a-47fc42e7f0d0

Não

x-obs-server-side-encryption-customer-algorithm

Algoritmo de encriptação. O cabeçalho é usado no modo SSE-C.

Tipo: string

Exemplo: x-obs-server-encryption-customer-algorithm:AES256

Restrições: Este cabeçalho deve ser usado em conjunto com x-obs-server-side-encryption-customer-key e x-obs-server-side-encryption-customer-key-MD5.

Não. Este cabeçalho é necessário quando SSE-C é usado.

x-obs-server-side-encryption-customer-key

Indica a chave usada para criptografar um objeto. O cabeçalho é usado no modo SSE-C.

Tipo: string

Exemplo: x-obs-server-encryption-side-customer-key:K7QkYpBkM5+hcs27fsNkUnNVaobncnLht/rCB2o/9Cw=

Restrições: Esse cabeçalho é uma chave de 256 bits codificada em base64 e deve ser usado em conjunto com x-obs-server-side-encryption-customer-algorithm e x-obs-server-side-encryption-customer-key-MD5.

Não. Este cabeçalho é necessário quando SSE-C é usado.

x-obs-server-side-encryption-customer-key-MD5

Indica o valor MD5 de uma chave usada para criptografar um objeto de destino. O cabeçalho é usado no modo SSE-C. O valor MD5 é usado para verificar se ocorre algum erro durante a transmissão da chave.

Tipo: string

Exemplo: x-obs-server-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

Restrições: Esse cabeçalho é uma string codificada em Base64 de 128 bits e deve ser usada em conjunto com x-obs-server-side-encryption-customer-algorithm e x-obs-server-side-encryption-customer-key.

Não. Este cabeçalho é necessário quando SSE-C é usado.

x-obs-copy-source-server-side-encryption-customer-algorithm

Indica o algoritmo usado para descriptografar um objeto de origem. O cabeçalho é usado no modo SSE-C.

Tipo: string

Exemplo: x-obs-copy-source-server-encryption-side-customer-algorithm:AES256

Restrições: Este cabeçalho deve ser usado em conjunto com x-obs-copy-source-server-side-encryption-customer-key e x-obs-copy-source-server-side-encryption-customer-key-MD5.

Não. Este cabeçalho é necessário quando SSE-C é usado para copiar um objeto de origem.

x-obs-copy-source-server-side-encryption-customer-key

Indica a chave usada para descriptografar um objeto de origem. O cabeçalho é usado no modo SSE-C. modo SSE-C.

Tipo: string

Exemplo: x-obs-copy-source-server-side-encryption-customer-key:K7QkYpBkM5+hcs27fsNkUnNVaobncnLht/rCB2o/9Cw=

Restrições: Esse cabeçalho é uma chave de 256 bits codificada em Base64 e deve ser usado em conjunto com x-obs-copy-source-server-side-encryption-customer-algorithm e x-obs-copy-source-server-side-encryption-customer-key-MD5.

Não. Este cabeçalho é necessário quando SSE-C é usado para copiar um objeto de origem.

x-obs-copy-source-server-side-encryption-customer-key-MD5

Indica o valor MD5 da chave usada para descriptografar um objeto de origem. O cabeçalho é usado no modo SSE-C. O valor MD5 é usado para verificar se ocorre algum erro durante a transmissão da chave.

Tipo: string

Exemplo: x-obs-copy-source-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

Restrições: Esse cabeçalho é uma string codificada em Base64 de 128 bits e deve ser usada em conjunto com x-obs-copy-source-server-side-encryption-customer-algorithm ex-obs-copy-source-server-side-encryption-customer-key-MD5.

Não. Este cabeçalho é necessário quando SSE-C é usado para copiar um objeto de origem.

success_action_redirect

Indica o endereço (URL) para o qual uma solicitação respondida com sucesso é redirecionada.

  • Se o valor for válido e a solicitação for bem-sucedida, o OBS retornará o código de status 303. Location contém success_action_redirect, bem como o nome do bucket, o nome do objeto e o ETag do objeto.
  • Se este parâmetro for inválido, o OBS ignorará este parâmetro. O código de resposta é 204, e o Location é o endereço do objeto.

Tipo: string

Não

Para obter detalhes sobre outros cabeçalhos, consulte Tabela 3.

Elementos de solicitação

Esta solicitação não contém nenhum elemento.

Sintaxe da resposta

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
HTTP/1.1 status_code
Content-Type: application/xml 
Date: date
Content-Length: length

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<CopyObjectResult xmlns="http://obs.region.myhuaweicloud.com/doc/2015-06-30/">
    <LastModified>modifiedDate</LastModified> 
    <ETag>etagValue</ETag> 
</CopyObjectResult>

Cabeçalhos de resposta

A resposta à solicitação usa cabeçalhos comuns. Para mais detalhes, consulte Tabela 1.

Além da resposta comum cabeçalhos, a seguinte mensagem cabeçalhos também podem ser utilizados. Para mais detalhes, consulte Tabela 2.

Tabela 2 Parâmetros adicionais de cabeçalho de resposta

Cabeçalho

Descrição

x-obs-copy-source-version-id

ID de versão do objeto de origem

Tipo: string

x-obs-version-id

ID de versão do objeto de destino

Tipo: string

x-obs-server-side-encryption

Este cabeçalho é incluído em uma resposta se SSE-KMS for usado.

Tipo: string

Exemplo: x-obs-server-side-encryption: kms

x-obs-server-side-encryption-kms-key-id

Indica a ID da chave mestra. Este cabeçalho é incluído em uma resposta se SSE-KMS for usado.

Tipo: string

Formato:regionID:domainID:key/key_id

regionID é o ID da região à qual a chave pertence. domainID é o ID da conta do locatário ao qual a chave pertence. key_id é o ID da chave usado nessa criptografia.

Exemplo: x-obs-server-side-encryption-kms-key-id:region:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0

x-obs-server-side-encryption-customer-algorithm

Indica um algoritmo de encriptação. Este cabeçalho é incluído em uma resposta se SSE-C é usado.

Tipo: string

Exemplo: x-obs-server-encryption-customer-algorithm:AES256

x-obs-server-side-encryption-customer-key-MD5

Indica o valor MD5 de uma chave usada para criptografar objetos. Este cabeçalho é incluído em uma resposta se SSE-C é usado.

Tipo: string

Exemplo: x-obs-server-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ==

x-obs-storage-class

Esse cabeçalho é retornado quando a classe de armazenamento de um objeto não é Padrão. Opções de valor: WARM e COLD

Tipo: string

Elementos de resposta

Esta resposta contém elementos de um resultado de cópia. Tabela 3 descreve os elementos.

Tabela 3 Elementos de resposta

Elemento

Descrição

CopyObjectResult

Recipiente para o resultado da cópia

Tipo: XML

LastModified

Última hora em que o objeto foi modificado

Tipo: string

ETag

Resumo MD5 de 128 bits do código Base64 de um novo objeto. ETag é o identificador exclusivo do conteúdo do objeto. Ele pode ser usado para identificar se o conteúdo do objeto é alterado. Por exemplo, se o valor de ETag for A quando um objeto for carregado e o valor de ETag for alterado para B quando o objeto for baixado, isso indicará que o conteúdo do objeto foi alterado.

Tipo: string

Respostas de erro

Nenhuma resposta de erro especial é retornada. Para obter detalhes sobre respostas de erro, consulte Tabela 2.

Solicitação de exemplo 1

Copie o objeto srcobject no bucket bucket para o objeto destobject no bucket examplebucket.

1
2
3
4
5
6
7
PUT /destobject HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.region.myhuaweicloud.com
Accept: */*
Date: WED, 01 Jul 2015 04:19:21 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:2rZR+iaH8xUewvUKuicLhLHpNoU=
x-obs-copy-source: /bucket/srcobject

Resposta de exemplo 1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: 001B21A61C6C00000134031BE8005293
x-obs-id-2: MDAxQjIxQTYxQzZDMDAwMDAxMzQwMzFCRTgwMDUyOTNBQUFBQUFBQWJiYmJiYmJi
Date: WED, 01 Jul 2015 04:19:21 GMT
Content-Length: 249

<?xml version="1.0" encoding="utf-8"?>
<CopyObjectResult xmlns="http://obs.region.myhuaweicloud.com/doc/2015-06-30/">
  <LastModified>2015-07-01T00:48:07.706Z</LastModified>  
  <ETag>"507e3fff69b69bf57d303e807448560b"</ETag> 
</CopyObjectResult>

Solicitação de exemplo 2

Copie um objeto de várias versões e copie o objeto srcobject cujo número da versão é AAABQ4uBLdLc0vycq3gAAAAEVURTRkha no bucket bucket para objeto destobject no bucket examplebucket.

1
2
3
4
5
6
7
PUT /destobject HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.region.myhuaweicloud.com
Accept: */*
Date: WED, 01 Jul 2015 04:20:29 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:4BLYv+1UxfRSHBMvrhVLDszxvcY=
x-obs-copy-source: /bucket/srcobject?versionId=AAABQ4uBLdLc0vycq3gAAAAEVURTRkha

Resposta de exemplo 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: DCD2FC9CAB78000001438B8A9C898B79
x-obs-id-2: DB/qBZmbN6AIoX9mrrSNYdLxwvbO0tLR/l6/XKTT4NmZspzhWrwp5Z74ybAYVOgr
Content-Type: application/xml
x-obs-version-id: AAABQ4uKnOrc0vycq3gAAAAFVURTRkha
x-obs-copy-source-version-id: AAABQ4uBLdLc0vycq3gAAAAEVURTRkha
Date: WED, 01 Jul 2015 04:20:29 GMT
Transfer-Encoding: chunked

<?xml version="1.0" encoding="utf-8"?>
<CopyObjectResult xmlns="http://obs.region.myhuaweicloud.com/doc/2015-06-30/">
  <LastModified>2015-07-01T01:48:07.706Z</LastModified>  
  <ETag>"507e3fff69b69bf57d303e807448560b"</ETag> 
</CopyObjectResult>