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-04-27 GMT+08:00

Carga de varias partes

La carga de varias partes permite cargar un objeto único como un grupo de partes por separado. Cada parte es una parte de datos de objeto consecutivos. Puede cargar partes de objeto en cualquier secuencia o cargarlas de forma independiente. Una pieza se puede recargar después de un fallo de carga, sin afectar a otras piezas. Una vez cargadas todas las piezas, OBS fusiona estas piezas para crear el objeto. Generalmente, si el tamaño de un objeto alcanza los 100 MB, se recomienda cargar varias partes. Por ejemplo, desea cargar un objeto (500 MB) en un bucket de OBS. En este caso, puede utilizar la herramienta OBS Browser+ para cargar el objeto en varias partes. La herramienta divide automáticamente el objeto en varias partes para cargarlo. Alternativamente, puede hacer una llamada a la API para la carga multiparte, mejorando la eficiencia de la carga y reduciendo los fallos.

La carga de varias partes proporciona las siguientes ventajas:

  • Mejorar el rendimiento: puede cargar piezas en paralelo para mejorar el rendimiento.
  • Recuperación rápida de cualquier fallo de red: Las piezas de tamaño pequeño pueden minimizar el impacto de la carga fallida causada por errores de red.
  • Cómoda suspensión y reanudación de la carga de objetos: Puede cargar piezas en cualquier momento. Una carga de varias partes no tiene un período de validez. Debe completar o cancelar explicitamente la carga de varias partes.
  • Iniciar la carga antes de conocer el tamaño de un objeto: Puede cargar un objeto mientras lo crea.

La API de carga de varias partes permite cargar un objeto grande en varias partes. Puede cargar un nuevo objeto grande o crear una copia de un objeto existente mediante esta API.

El procedimiento para cargar varias secciones es el siguiente: iniciar la carga (inicializar la tarea de carga), cargar partes y completar la carga (unir las partes cargadas). Al recibir una solicitud de fusión de piezas, OBS fusiona las piezas cargadas para crear un nuevo objeto. Se puede acceder al objeto como otros objetos.

Puede enumerar todas las tareas de carga de varias partes en curso u obtener la lista de partes cargadas sobre una tarea especificada de carga de varias partes. A continuación se describen las operaciones detalladas.

Inicialización de una tarea de carga de varias partes

Cuando envía una solicitud para iniciar la carga multiparte, OBS devuelve una respuesta con el ID de carga, que es el identificador único de la carga de varias partes. Este ID debe incluirse en la solicitud para cargar piezas, enumerar las piezas cargadas, completar una carga de varias piezas o cancelar una carga de varias piezas.

Carga de una parte

Al cargar piezas, debe especificar el ID de carga y los números de pieza. Puede seleccionar cualquier número de pieza entre 1 y 10,000. Un número de pieza identifica de forma exclusiva una pieza y su ubicación en el objeto que está cargando. Si el número de una parte cargada se utiliza para cargar una nueva parte, la parte cargada se sobrescribirá. Cada vez que suba una parte, OBS devuelve el encabezado ETag en la respuesta. Para cada tarea de carga de piezas, debe registrar los números de pieza y los valores de ETag. Estos números de parte y valores de ETag son necesarios en operaciones posteriores de completar la tarea de carga de varias partes.

Una vez inicializada la tarea de carga de varias partes y cargadas una o más partes, debe combinar las partes o cancelar la tarea de carga de varias partes. De lo contrario, tienes que pagar la tarifa de almacenamiento de las piezas cargadas. OBS libera el almacenamiento y deja de cobrar la tarifa de almacenamiento solo después de que se fusionen las partes cargadas o se cancele la tarea de carga de varias partes.

Cuando se realizan varias operaciones de carga simultánea para la misma parte de un objeto, el servidor cumple con la política Last Write Win, pero el tiempo al que se hace referencia en Last Write es el tiempo en que se crean los metadatos de la parte. Para garantizar la precisión de los datos, el cliente debe estar bloqueado durante la carga simultánea para la misma parte de un objeto. La carga simultánea para diferentes partes de un objeto no requiere que el cliente esté bloqueado.

Copia de una parte

Después de crear un trabajo de carga de varias partes, puede especificar ID de carga y cargar partes para la tarea de carga especificada. También puede llamar a la API para copiar piezas para agregar piezas. Una parte de un objeto o todo el objeto se puede copiar como una parte.

No se puede determinar si una solicitud se ejecuta correctamente solo con status_code en el encabezado devuelto por HTTP. Si se devuelve 200 en status_code, el servidor ha recibido la solicitud y comienza a procesar la solicitud. El cuerpo de la respuesta muestra si la solicitud se ejecuta correctamente. La solicitud se ejecuta correctamente solo cuando el cuerpo contiene Etag. De lo contrario, la solicitud no se puede ejecutar.

Si copia el objeto de origen como una parte llamada part1 y otra part1 ya existe antes de la operación de copia, la part1 original será sobrescrita por la nueva después de la operación de copia. Una vez que la copia se realiza correctamente, sólo se muestra la nueva pieza1. Los datos de la parte 1 anterior se eliminarán. Por lo tanto, asegúrese de que la pieza de destino no existe o no tiene valor al copiar una pieza. De lo contrario, los datos pueden ser eliminados por error. El objeto de origen no cambia durante la copia.

Fusión de piezas y cancelación de una tarea de carga de varias piezas

Al fusionar piezas, OBS crea un objeto estandarizando varias piezas en orden ascendente. Si se proporciona algún metadatos de objeto en la inicialización de una tarea de carga de artículos, OBS asocia los metadatos con el objeto. Una vez completada la carga de varias piezas, las piezas dejarán de existir. Una solicitud de fusión de piezas debe contener el ID de carga, los números de pieza y una lista de valores de ETag correspondientes. Las respuestas OBS incluyen la ETag que identifica de forma única datos de objetos compuestos. La ETag no es el valor hash MD5 de los datos del objeto. Puede cancelar una tarea de carga de varias partes. Después de cancelar una tarea de carga de varias partes, el ID de carga no se puede utilizar para cargar ninguna parte. Luego, OBS libera el almacenamiento de todas las partes cargadas. Si detienes una carga multiparte en curso, la carga seguirá completa (el resultado puede ser exitoso o fallado). Para liberar la capacidad de almacenamiento ocupada por todas las partes cargadas, cancele la carga de varias partes una vez completada toda la tarea.

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 fusionar las piezas, adopta la API utilizada para enumerar las piezas que se han cargado para comprobar todas las piezas para asegurarse de que no se pierda ninguna pieza.

Enumeración de piezas cargadas

Puede enumerar las partes de una tarea de carga de varias partes especificadas o las partes de todas las tareas de carga de varias partes en curso. La información sobre las piezas cargadas en una carga de varias piezas específica se devolverá para una solicitud de lista de las piezas cargadas. Para cada solicitud de listar las piezas cargadas, OBS devuelve información sobre las piezas cargadas en la carga multiparte específica. Se puede devolver información sobre un máximo de 1000 piezas. Si se cargan más de 1000 piezas en una carga de varias piezas, debe enviar varias solicitudes para listar todas las piezas cargadas. La lista de piezas cargadas no incluye las piezas combinadas.

Una lista devuelta solo se puede utilizar para la verificación. Una vez completada la carga de varias partes, el resultado de la lista ya no es válido. Sin embargo, cuando se cargan los números de pieza y los valores ETag devueltos por OBS, se reservará la lista de números de pieza especificados por el usuario.

Listado de tareas de carga de varias partes

Puede obtener la lista de tareas de carga multiparte inicializadas enumerando las tareas de carga multiparte en el bucket. Las tareas de carga multiparte inicializadas se refieren a las tareas de carga multiparte que no se fusionan o cancelan después de la inicialización. Se puede devolver un máximo de 1000 tareas de carga multiparte para cada solicitud. Si el número de tareas de carga multiparte en curso es superior a 1000, debe enviar más solicitudes para consultar las tareas restantes.

Tabla 1 enumera las restricciones en la lista de cargas de varias partes.

Tabla 1 Restricciones en la lista de cargas multiparte

Artículo

Restricción

Tamaño del objeto

Hasta 48.8 TB

Número máximo de piezas para cada tarea de carga

10,000

Número de pieza

1–10,000 (incluido)

Tamaño de la pieza

El tamaño de la pieza está entre 5 MB y 5 GB. El tamaño de la última parte está entre 0 bytes y 5 GB.

Número máximo de piezas cargadas devueltas en respuesta a la solicitud de enumeración de piezas cargadas.

1000

Número máximo de tareas de carga multiparte inicializadas devueltas en respuesta a la solicitud de enumeración de tareas multiparte inicializadas.

1000

Operaciones y permisos de carga de varias partes

Puede realizar la carga de varias partes solo después de que se le haya concedido el permiso. Puede usar ACL, políticas de bucket o políticas de usuario para conceder a los usuarios el permiso. En la siguiente tabla se enumeran las operaciones de carga de varias partes y los permisos necesarios que pueden conceder las ACL, las políticas de bucket o las políticas de usuario.

Operación

Permisos requeridos

Inicialización de una tarea de carga de varias partes

Para realizar esta operación, necesita tener el permiso PutObject.

El propietario de un bucket puede permitir a los administradores realizar la operación PutObject.

Carga de piezas

Para realizar esta operación, necesita tener el permiso PutObject.

Solo el iniciador de una carga de varias partes puede cargar partes. El propietario del bucket debe conceder al iniciador de carga de varias partes el permiso PutObject para que el iniciador pueda cargar partes del objeto.

Copia de piezas

Para realizar esta operación, necesita tener el permiso PutObject así como el permiso GetObject sobre el objeto que se va a copiar.

Solo el iniciador de una carga de varias partes puede cargar partes. El propietario del bucket debe conceder al iniciador de carga de varias partes el permiso PutObject para que el iniciador pueda cargar partes del objeto.

Fusión de piezas

Para realizar esta operación, necesita tener el permiso PutObject.

Solo el iniciador de una carga de varias partes puede combinar las partes. El propietario del bucket debe conceder al iniciador de carga multiparte el permiso PutObject para que el iniciador pueda completar la carga multiparte.

Cancelación de tareas de carga multiparte

Para realizar esta operación, necesita tener el permiso AbortMultipartUpload.

De forma predeterminada, solo el propietario del bucket y el iniciador de carga de varias partes tienen este permiso. Además de la configuración predeterminada, el propietario del bucket puede permitir que los administradores realicen esta operación. El propietario del cubo también puede negar a los administradores que realicen esta operación.

Enumeración de piezas cargadas

Para realizar esta operación, necesita tener el permiso ListMultipartUploadParts.

De forma predeterminada, el propietario del bucket puede enumerar las partes cargadas de cualquier carga de varias partes al bucket. El iniciador de carga multiparte puede enumerar las partes cargadas de una carga multiparte específica.

Además de la configuración predeterminada, el propietario del bucket puede permitir que los administradores realicen esta operación. El propietario del cubo también puede negar a los administradores que realicen esta operación.

Listado de tareas de carga de varias partes

Para enumerar las tareas de carga de varias partes en el bucket, necesita tener el permiso ListBucketMultipartUploads.

Además de la configuración predeterminada, el propietario del bucket puede permitir que los administradores realicen esta operación.

REST APIs aplicables a la carga de varias partes

Las siguientes secciones de la Referencia de la API de servicio de almacenamiento de objetos describen las REST API relevantes para la carga de varias partes.

  • ListBucketMultipartUpload
  • InitiateMultipartUpload
  • UploadPart
  • UploadPart-Copy
  • ListParts
  • CompleteMultipartUpload
  • AbortMultipartUpload