Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-07-11 GMT+08:00

Combinación de piezas en un objeto completo

Funciones

Después de cargar todas las partes para una carga de varias partes, puede utilizar esta operación para completarla. Antes de realizar esta operación, no puede descargar los datos cargados. Al fusionar partes, debe copiar la información adicional de encabezado de mensaje registrada durante la inicialización de la tarea de carga de varias partes en los metadatos del objeto. El proceso de tratamiento es el mismo que el del objeto de carga común con estos encabezados de mensaje. En el caso de fusionar partes simultáneamente, se debe seguir la política Last Write Win, pero el tiempo para iniciar la última escritura se especifica como el tiempo en que se inicia la carga de varias partes de una pieza.

Si no se ha cancelado una carga de varias partes, las partes cargadas ocupan su cuota de almacenamiento. Una vez que todas las partes de la carga de varias partes se fusionan con un objeto, solo el objeto ocupa su cuota de almacenamiento. Si una pieza cargada en una carga de varias piezas no se utiliza en ninguna carga de varias piezas de fusión, la pieza se eliminará para liberar la cuota de almacenamiento.

Puede enviar una solicitud para descargar todos o algunos datos de la multiparte generada especificando un rango.

Puede enviar una solicitud para eliminar todas las piezas cargadas en una carga de varias piezas. Los datos eliminados no pueden restablecerse.

Las piezas combinadas no utilizan el valor MD5 de todo el objeto como ETag. Su ETag se calcula de la siguiente manera: MD5(M1M2...MN)-N, donde Mn es el valor MD5 de la parte n (N es el número total de partes). Como se describe en el Modelo de solicitud, hay tres partes y cada parte tiene un valor MD5. Los valores MD5 de las tres partes se recalculan para obtener un nuevo valor MD5. A continuación, se agrega -N a la derecha del valor MD5 para obtener la ETag de las partes combinadas. En este ejemplo, -N es -3.

Si la respuesta a una solicitud de fusión de objetos se agota y se devuelve el error 500 o 503, puede obtener primero los metadatos de objeto de la tarea de carga de múltiples partes. A continuación, compruebe si el valor del encabezado x-obs-uploadId en la respuesta es el mismo que el ID de esta tarea de carga de varias partes. Si son iguales, las partes de objeto se han combinado correctamente en el servidor y no es necesario volver a intentarlo. Para más detalles, consulte Consistencia de las operaciones simultáneas.

Control de versiones

Si un bucket tiene activado el control de versiones, se genera un ID de versión único para un objeto creado a partir de una carga de varias partes en este bucket y el ID de versión se devuelve en el encabezado de respuesta x-obs-version-id. Si el control de versiones se suspende para un bucket, la versión del objeto obtenida después de la combinación es null. Para obtener más información sobre los estados de control de versiones de un bucket, consulte Configuración del control de versiones para un bucket.

Si se cargan 10 piezas pero solo se seleccionan nueve piezas para combinar, las piezas que no se fusionan se eliminarán automáticamente por el sistema. Las piezas que no se fusionan no se pueden restaurar después de eliminarlas. Antes de combinar las piezas, adopte la interfaz utilizada para enumerar las piezas que se han cargado para comprobar todas las piezas para asegurarse de que no se pierda ninguna pieza.

Sintaxis de solicitud

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
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 solicitud

Esta solicitud utiliza parámetros para especificar el ID de una carga de varias partes cuyas partes se fusionarán. Tabla 1 describe los parámetros.

Tabla 1 Parámetros de solicitud

Parámetro

Descripción

Obligatorio

uploadId

Indica una carga de varias partes.

Tipo: string

encoding-type

Encodes the Key in the response based on the specified type. If the Key contain control characters that are not supported by the XML 1.0 standard, you can set encoding-type to encode the Key in response.

Type: string

Optional value: url

No

Encabezados de solicitud

Esta solicitud utiliza encabezados comunes. Para más detalles, consulte Tabla 3.

Elementos de solicitud.

Esta solicitud utiliza elementos para especificar la lista de piezas que se van a fusionar. Tabla 2 describe los elementos.

Tabla 2 Elementos de solicitud.

Elemento

Descripción

Obligatorio

CompleteMultipartUpload

Lista de piezas que deben combinarse

Tipo: XML

PartNumber

Número de pieza

Tipo: integer

ETag

Valor ETag devuelto tras la carga correcta de una pieza. Es el identificador único del contenido de la pieza. Este parámetro se utiliza para verificar la coherencia de los datos cuando se fusionan piezas.

Tipo: string

Sintaxis de respuesta

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>

Encabezados de respuesta

La respuesta a la solicitud utiliza encabezados comunes. Para más detalles, consulte Tabla 1.

Además de los encabezados de respuesta comunes, también se pueden usar los siguientes encabezados de mensaje. Para más detalles, consulte Tabla 3.

Tabla 3 Parámetros de cabecera de respuesta adicionales

Encabezado

Descripción

x-obs-version-id

Versión del objeto después de fusionar las piezas.

Tipo: string

x-obs-server-side-encryption

Este encabezado se incluye en una respuesta si se utiliza SSE-KMS.

Tipo: string

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

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

Indica el ID de clave principal. Este encabezado se incluye en una respuesta si se utiliza SSE-KMS.

Tipo: string

Formato: regionID:domainID:key/key_id

regionID es el ID de la región a la que pertenece la clave. domainID es el ID de cuenta del tenant al que pertenece la clave. key_id es el ID de clave utilizado en esta encriptación.

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

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

Indica un algoritmo de encriptación. Este encabezado se incluye en una respuesta si se utiliza SSE-C.

Tipo: string

Ejemplo: x-obs-server-side-encryption-customer-algorithm:AES256

Elementos de respuesta

Esta respuesta utiliza los elementos para devolver el resultado de la fusión de piezas. Tabla 4 describe los elementos.

Tabla 4 Elementos de respuesta

Elemento

Descripción

Location

URL del objeto después de fusionar partes.

Tipo: string

Bucket

Bucket en el que se combinan las piezas

Tipo: string

EncodingType

Encoding type of an object key. If the Key contain control characters that are not supported by the XML 1.0 standard, you can set encoding-type to encode the Key in response.

Type: string

Optional value: url

Key

Indica la clave del objeto generado.

Tipo: string

ETag

El resultado calculado en base a la ETag de cada parte es el identificador único del contenido del objeto.

Tipo: string

Respuestas de error

  1. Si no existe ningún cuerpo del mensaje, OBS devuelve 400 Bad Request.
  2. Si el formato del cuerpo del mensaje es incorrecto, OBS devuelve 400 Bad Request.
  3. Si la información de pieza en el cuerpo del mensaje no se ordena por número de secuencia de pieza, OBS devuelve 400 Bad Request y el código de error es "InvalidPartOrder".
  4. Si el AK o la firma no son válidos, OBS devuelve 403 Forbidden y el código de error es "AccessDenied".
  5. Si el bucket solicitado no existe, OBS devuelve 404 Not Found y el código de error es "NoSuchBucket".
  6. Si la carga multiparte solicitada no existe, OBS devuelve 404 Not Found y el código de error NoSuchUpload.
  7. Si el usuario no es el iniciador de la tarea, OBS devuelve 403 Forbidden y el código de error es "AccessDenied".
  8. Si la lista de artículos de solicitud contiene un artículo que no existe, OBS devuelve 400 Bad Request y el código de error es "InvalidPart".
  9. Si la etiqueta de la pieza contenida en la lista de piezas de solicitud es incorrecta, OBS devuelve 400 Bad Request y el código de error es "InvalidPart".
  10. Si el tamaño de una parte distinta de la última parte es inferior a 100 KB, OBS devuelve 400 Bad Request.
  11. Si el tamaño del objeto es mayor que 48.8 TB después de fusionar las piezas, OBS devuelve el código de estado 400 Bad Request.

Otros errores se incluyen en Tabla 2.

Modelo de solicitud

 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>

Modelo de respuesta

 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>