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.
![](https://support.huaweicloud.com/intl/es-us/api-obs/public_sys-resources/notice_3.0-es-us.png)
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.
Parámetro |
Descripción |
Obligatorio |
---|---|---|
uploadId |
Indica una carga de varias partes. Tipo: string |
Sí |
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.
Elemento |
Descripción |
Obligatorio |
---|---|---|
CompleteMultipartUpload |
Lista de piezas que deben combinarse Tipo: XML |
Sí |
PartNumber |
Número de pieza Tipo: integer |
Sí |
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 |
Sí |
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.
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.
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
- Si no existe ningún cuerpo del mensaje, OBS devuelve 400 Bad Request.
- Si el formato del cuerpo del mensaje es incorrecto, OBS devuelve 400 Bad Request.
- 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".
- Si el AK o la firma no son válidos, OBS devuelve 403 Forbidden y el código de error es "AccessDenied".
- Si el bucket solicitado no existe, OBS devuelve 404 Not Found y el código de error es "NoSuchBucket".
- Si la carga multiparte solicitada no existe, OBS devuelve 404 Not Found y el código de error NoSuchUpload.
- Si el usuario no es el iniciador de la tarea, OBS devuelve 403 Forbidden y el código de error es "AccessDenied".
- 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".
- 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".
- Si el tamaño de una parte distinta de la última parte es inferior a 100 KB, OBS devuelve 400 Bad Request.
- 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> |