Mescla das partes em um objeto completo
Funções
Depois de carregar todas as partes para um carregamento de multiparte, você pode usar esta operação para concluir o carregamento de multiparte. Antes de executar essa operação, você não pode baixar os dados carregados. Ao mesclar partes, você precisa copiar as informações adicionais do cabeçalho da mensagem registradas durante a inicialização da tarefa de carregamento de multiparte para os metadados do objeto. O processo de processamento é o mesmo que o do objeto de carregamento comum com esses cabeçalhos de mensagem. No caso de mesclar partes simultaneamente, a política Last Write Win deve ser seguida, mas o tempo para iniciar Last Write é especificado como o tempo em que um carregamento de multiparte é iniciado.
Se um carregamento de multiparte não tiver sido abortado, as partes carregadas ocuparão sua cota de armazenamento. Depois que todas as partes no carregamento de multiparte forem mescladas em um objeto, somente o objeto ocupará sua cota de armazenamento. Se uma parte carregada em um carregamento de multiparte não for usada em carregamentos de multiparte de mescla, a parte será excluída para liberar a cota de armazenamento.
Você pode enviar uma solicitação para baixar todos ou alguns dados do multiparte gerado especificando um bucket.
Você pode enviar uma solicitação para excluir todas as partes carregadas em um carregamento de multiparte. Os dados excluídos não podem ser restaurados.
As partes mescladas não usam o valor MD5 do objeto inteiro como ETag. Sua ETag é calculada da seguinte forma: MD5(M1M2...MN)-N, onde Mn é o valor MD5 da parte n (N é o número total de partes). Conforme descrito em Solicitação de exemplo, existem três partes e cada parte tem um valor MD5. Os valores MD5 das três partes são recalculados para obter um novo valor MD5. Então -N é adicionado à direita do valor MD5 para obter o ETag das partes combinadas. Neste exemplo, -N é -3.
Se a resposta a uma solicitação de mescla de objetos expirar e o erro 500 ou 503 for retornado, você poderá primeiro obter os metadados do objeto da tarefa de carregamento de multiparte. Em seguida, verifique se o valor do cabeçalho x-obs-carregamentoId na resposta é o mesmo que o ID dessa tarefa de carregamento de multiparte. Se eles forem os mesmos, as partes do objeto foram mescladas com êxito no servidor e você não precisa tentar novamente. Para mais detalhes, consulte Consistência de operações simultâneas.
Controle de versões
Se um bucket tiver o controle de versão habilitado, um ID de versão exclusivo será gerado para um objeto criado a partir de um carregamento de multiparte nesse bucket e o ID de versão será retornado no cabeçalho de resposta x-obs-version-id. Se o versionamento for suspenso para um bucket, a versão do objeto obtida após a mescla será null. Para obter detalhes sobre os status de versionamento de um bucket, consulte Configuração do versionamento para um bucket.
Se 10 partes forem carregadas, mas apenas nove forem selecionadas para mescla, as partes que não forem mescladas serão automaticamente excluídas pelo sistema. As partes que não são mescladas não podem ser restauradas após serem excluídas. Antes de combinar as partes, adote a interface usada para listar as partes que foram carregadas para verificar todas as partes para garantir que nenhuma parte seja perdida.
Sintaxe da solicitação
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
POST /ObjectName?uploadId=uploadID HTTP/1.1 Host: bucketname.obs.region.myhuaweicloud.com Date: date Content-Length: length Authorization: authorization <CompleteMultipartUpload> <Part> <PartNumber>partNum</PartNumber> <ETag>etag</ETag> </Part> <Part> <PartNumber>partNum</PartNumber> <ETag>etag</ETag> </Part> <Part> <PartNumber>partNum</PartNumber> <ETag>etag</ETag> </Part> </CompleteMultipartUpload> |
Parâmetros de solicitação
Essa solicitação usa parâmetros para especificar o ID de um carregamento de multiparte cujas partes serão mescladas. Tabela 1 descreve os parâmetros.
Parâmetro |
Descrição |
Obrigatório |
---|---|---|
uploadId |
Indica um carregamento de multiparte. Tipo: string |
Sim |
encoding-type |
Codifica a chave na resposta com base no tipo especificado. Se a chave contiver caracteres de controle que não são suportados pelo padrão XML 1.0, você poderá definir o tipo de codificação para codificar a chave em resposta. Tipo: string Valor opcional: url |
Não |
Cabeçalhos de solicitação
Essa solicitação usa cabeçalhos comuns. Para mais detalhes, consulte Tabela 3.
Elementos de solicitação
Esta solicitação utiliza elementos para especificar a lista de partes a serem mescladas. Tabela 2 descreve os elementos.
Elemento |
Descrição |
Obrigatório |
---|---|---|
CompleteMultipartUpload |
Lista de partes a combinar Tipo: XML |
Sim |
PartNumber |
Número da parte Tipo: integer |
Sim |
ETag |
Valor de ETag retornado após o carregamento bem-sucedido de uma parte. É o identificador exclusivo do conteúdo da parte. Este parâmetro é utilizado para verificar a consistência dos dados quando as partes são mescladas. Tipo: string |
Sim |
Sintaxe da resposta
1 2 3 4 5 6 7 8 9 |
HTTP/1.1 status_code Date: date <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CompleteMultipartUploadResult xmlns="http://obs.region.myhuaweicloud.com/doc/2015-06-30/"> <Location>http://example-Bucket.obs.region.myhuaweicloud.com/example-Object</Location> <Bucket>bucketname</Bucket> <Key>ObjectName</Key> <ETag>ETag</ETag> </CompleteMultipartUploadResult> |
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 3.
Cabeçalho |
Descrição |
---|---|
x-obs-version-id |
Versão do objeto após as partes serem mescladas. 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-side-encryption-customer-algorithm:AES256 |
Elementos de resposta
Esta resposta usa elementos para retornar o resultado da mescla de partes. Tabela 4 descreve os elementos.
Elemento |
Descrição |
---|---|
Location |
URL do objeto após as partes serem mescladas. Tipo: string |
Bucket |
Caçamba em que as partes são combinadas Tipo: string |
EncodingType |
Tipo de codificação de uma chave de objeto. Se a chave contiver caracteres de controle que não são suportados pelo padrão XML 1.0, você poderá definir o tipo de codificação para codificar a chave em resposta. Tipo: string Valor opcional: url |
Key |
Indica a chave do objeto gerado. Tipo: string |
ETag |
O resultado calculado com base na ETag de cada parte é o identificador exclusivo do conteúdo do objeto. Tipo: string |
Respostas de erro
- Se não existir nenhum corpo da mensagem, o OBS retorna 400 Bad Request.
- Se o formato do corpo da mensagem estiver incorreto, o OBS retornará 400 Bad Request.
- Se as informações de parte no corpo da mensagem não forem classificadas por número de sequência de parte, o OBS devolve 400 Bad Request e o código de erro é InvalidPartOrder.
- Se a AK ou assinatura for inválida, o OBS retornará 403 Forbidden e o código de erro será AccessDenied.
- Se o bucket solicitado não existir, o OBS retornará 404 Not Found e o código de erro será NoSuchBucket.
- Se o carregamento de multiparte solicitado não existir, o OBS retornará 404 Not Found e o código de erro será NoSuchUpload.
- Se o usuário não for o iniciador da tarefa, o OBS retornará 403 Forbidden e o código de erro será AccessDenied.
- Se a lista de partes solicitada contém uma parte que não existe, o OBS retorna 400 Bad Request e o código de erro é InvalidPart.
- Se a Etag da parte contida na lista de partes solicitada estiver incorreta, o OBS retornará 400 Bad Request e o código de erro será InvalidPart.
- Se o tamanho de uma parte diferente da última parte for menor que 100 KB, o OBS retornará 400 Bad Request.
- Se o tamanho do objeto for maior que 48,8 TB após as partes serem mescladas, o OBS retornará o código de status 400 Bad Request.
Outros erros estão incluídos em Tabela 2.
Solicitação de exemplo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
POST /object02?uploadId=00000163D46218698DF407362295674C HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.region.myhuaweicloud.com Accept: */* Date: WED, 01 Jul 2015 05:23:46 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:dOfK9iILcKxo58tRp3fWeDoYzKA= Content-Length: 422 <?xml version="1.0" encoding="utf-8"?> <CompleteMultipartUpload> <Part> <PartNumber>1</PartNumber> <ETag>a54357aff0632cce46d942af68356b38</ETag> </Part> <Part> <PartNumber>2</PartNumber> <ETag>0c78aef83f66abc1fa1e8477f296d394</ETag> </Part> <Part> <PartNumber>3</PartNumber> <ETag>acbd18db4cc2f85cedef654fccc4a4d8</ETag> </Part> </CompleteMultipartUpload> |
Resposta de exemplo
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: 8DF400000163D4625BE3075019BD02B8 x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCSN8D1AfQcIvyGBZ9+Ee+jU6zv1iYdO4 Content-Type: application/xml Date: WED, 01 Jul 2015 05:23:46 GMT Content-Length: 326 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CompleteMultipartUploadResult xmlns="http://obs.ap-southeast-1.myhuaweicloud.com/doc/2015-06-30/"> <Location>/examplebucket/object02</Location> <Bucket>examplebucket</Bucket> <Key>object02</Key> <ETag>"03f814825e5a691489b947a2e120b2d3-3"</ETag> </CompleteMultipartUploadResult> |