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.
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.
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.
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.
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> |