Copia de objetos
Funciones
Puede realizar esta operación para crear una copia de un objeto existente en OBS.
Los usuarios pueden determinar si copiar los metadatos del objeto de origen al objeto de destino (de forma predeterminada) o reemplazar los metadatos del objeto de destino por los metadatos contenidos en la solicitud. La ACL del objeto de origen no se copia en el objeto de destino. De forma predeterminada, la ACL del objeto de destino es privada. Puedes establecer una ACL para el objeto de destino enviando una solicitud de API.
La solicitud de copia de un objeto debe llevar la información sobre el bucket y el objeto que se va a copiar en el campo de encabezado. El cuerpo del mensaje no se puede transportar.
Esta operación admite la encriptación del lado del servidor.
El rango de tamaño del objeto de destino es [0, 5 GB]. Si el tamaño del objeto de origen supera los 5 GB, solo puede copiar algunos objetos con la API Range.
Control de versiones
De forma predeterminada, x-obs-copy-source especifica la última versión del objeto de origen. Si la última versión del objeto de origen tiene un marcador de eliminación, se considera que el objeto se ha eliminado. Puede agregar versionId para solicitar encabezado x-obs-copy-source para copiar un objeto con el ID de versión especificado.
Si un bucket tiene activado el control de versiones, el sistema genera automáticamente un ID de versión único para el objeto solicitado en este bucket y devuelve el ID de versión en el encabezado de respuesta x-obs-version-id. Si el control de versiones está suspendido para el bucket, el número de versión del objeto es null.
Cuando el estado de control de versiones del bucket está deshabilitado, si realiza una copia de objeto_A y la guarda como objeto_B y ya existe un objeto denominado objeto_B, el nuevo objeto_B sobrescribirá al existente. Después de que la copia se ejecuta correctamente, solo se puede descargar el nuevo objeto_B porque el antiguo objeto_B se ha eliminado. Por lo tanto, antes de copiar un objeto, asegúrese de que no hay ningún objeto con el mismo nombre que la copia del objeto para evitar que los datos se eliminen por error. Durante la copia, object_A no tiene cambios.
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.
Objetos de Archive de OBS
Si los objetos de origen son objetos Archive de OBS, compruebe el estado de restauración de los objetos. Estos objetos sólo se pueden copiar después de que se hayan restaurado. Si el objeto de origen no se recupera o se está recuperando, la copia falla y se devuelve el error 403 Forbidden. El fallo se describe de la siguiente manera:
ErrorCode: InvalidObjectState
ErrorMessage: Operation is not valid for the source object's storage class
Sintaxis de solicitud
1 2 3 4 5 6 7 8 9 |
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 solicitud
Esta solicitud no contiene ningún parámetro.
Encabezados de solicitud
Puede agregar encabezados opcionales para especificar el objeto que se va a copiar. Tabla 3 describe los encabezados opcionales.
Encabezado |
Descripción |
Obligatorio |
---|---|---|
x-obs-acl |
Al copiar un objeto, puede agregar este encabezado para establecer la política de control de permisos para el objeto. Las políticas comunes predefinidas son las siguientes: private, public-read, public-read-write (Para obtener más información sobre cada política, consulte la configuración de ACL mediante campos de encabezado en ACL.) Type: string Ejemplo: x-obs-acl: acl |
No |
x-obs-grant-read |
Al crear un objeto, puede utilizar este encabezado para autorizar a todos los usuarios de una cuenta el permiso para leer objetos y obtener metadatos de objeto. Type: string |
No |
x-obs-grant-read-acp |
Al crear un objeto, puede utilizar este encabezado para autorizar a todos los usuarios de una cuenta el permiso para obtener la ACL del objeto. Type: string |
No |
x-obs-grant-write-acp |
Al crear un objeto, puede utilizar este encabezado para autorizar a todos los usuarios de una cuenta el permiso para escribir el objeto ACL. Type: string |
No |
x-obs-grant-full-control |
Al crear un objeto, puede utilizar este encabezado para autorizar a todos los usuarios de una cuenta el permiso para leer el objeto, obtener los metadatos del objeto, obtener la ACL del objeto y escribir la ACL del objeto. Type: string |
No |
x-obs-copy-source |
Indica los nombres del bucket de origen y del objeto de origen. Si el objeto de origen tiene varias versiones, el parámetro versionId se puede utilizar para especificar la versión deseada. Type: string Restricción: la codificación de URL es necesaria para el manejo de caracteres chinos. Ejemplo: x-obs-copy-source: /source_bucket/sourceObject |
Sí |
x-obs-metadata- directive |
Indica si los metadatos del objeto de destino se copian del objeto de origen o se sustituyen por los metadatos contenidos en la solicitud. Type: string Valores válidos: COPY y REPLACE Valor predeterminado: COPY Ejemplo: x-obs-metadata-directive: metadatos_directive Restricciones: los valores que no sean COPY o REPLACE dan como resultado una respuesta de error inmediata basada en 400. Si necesita modificar los metadatos (lo mismo para los objetos de origen y destino), este parámetro debe establecerse en REPLACE, de lo contrario, la solicitud no es válida y el servidor devuelve un error de código de estado HTTP 400. Este parámetro no se puede utilizar para cambiar un objeto cifrado a un objeto no cifrado (lo mismo para los objetos de origen y de destino). Si utiliza este parámetro para cambiar el objeto cifrado, el sistema devuelve 400. |
No |
x-obs-copy-source-if-match |
Copia el objeto fuente solo si su ETag coincide con el especificado por este encabezado. De lo contrario, se devuelve un error de código de estado HTTP 412 (precondición fallida). Type: string Ejemplo: x-obs-copy-source-if-match: etag Restricción: Este parámetro se puede usar con x-obs-copy-source-if-unmodified-since, pero no con otros parámetros de copia condicional. |
No |
x-obs-copy-source-if-none-match |
Copia el objeto si su etiqueta de entidad (ETag) coincide con la etiqueta especificada. De lo contrario, la solicitud devuelve un error de código de estado HTTP 412 (precondición fallida). Type: string Ejemplo: x-obs-copy-source-if-none-match: etag Restricción: Este parámetro se puede usar con x-obs-copy-source-if-unmodified-since, pero no con otros parámetros de copia condicional. |
No |
x-obs-copy-source-if-unmodified- since |
Copia el objeto de origen solo si no se ha modificado desde el tiempo especificado por este encabezado. De lo contrario, se devuelve un error de código de estado HTTP 412 (precondición fallida). Este encabezado se puede usar con x-obs-copy-source-if-match, pero no se puede usar con otros encabezados de copia condicional Tipo: string de caracteres de tiempo HTTP que cumple con el formato especificado en http://www.ietf.org/rfc/rfc2616.txt Ejemplo: x-obs-copy-source-if-unmodified -since: time-stamp |
No |
x-obs-copy-source-if-modified-since |
Copia el objeto de origen solo si no se ha modificado desde el tiempo especificado por este encabezado. De lo contrario, se devuelve un error de código de estado HTTP 412 (precondición fallida). Este encabezado se puede usar con x-obs-copy-source-if-none-match, pero no se puede usar con otros encabezados de copia condicional Tipo: string de caracteres de tiempo HTTP que cumple con el formato especificado en http://www.ietf.org/rfc/rfc2616.txt Ejemplo: x-obs-copy-source-if-modified-since: time-stamp |
No |
x-obs-storage-class |
Al copiar un objeto, puede utilizar este encabezado para especificar la clase de almacenamiento del objeto. Si no utiliza este encabezado, la clase de almacenamiento de objetos es la clase de almacenamiento predeterminada del bucket de destino en el que se copia el objeto. Type: string OBS proporciona tres clases de almacenamiento: Standard (STANDARD), Infrequent Access (WARM), and Archive (COLD). Por lo tanto, los valores para este elemento pueden ser STANDARD, WARM y COLD. Los valores distinguen entre mayúsculas y minúsculas. Ejemplo: x-obs-storage-class: STANDARD |
No |
x-obs-persistent-headers |
Al copiar un objeto, puede agregar el encabezado x-obs-persistent-headers en una solicitud HTTP para especificar uno o más encabezados de respuesta definidos por el usuario. Los encabezados de respuesta definidos por el usuario se devolverán en el encabezado de respuesta cuando recupere el objeto de destino o consulte los metadatos del objeto de destino. Type: string Formato: x-obs-persistent-headers: key1:base64_encode(value1),key2:base64_encode(value2)... Nota: Los elementos, como key1 y key2, son encabezados definidos por el usuario. Si contienen caracteres no ASCII o irreconocibles, se pueden codificar mediante URL o Base64. El servidor procesa estos encabezados como cadenas de caracteres, pero no los decodifica. Los elementos, tales como value1 y value2 son los valores de las cabeceras correspondientes. base64_encode indica que el valor se codifica usando Base64. Un encabezado definido por el usuario y su valor codificado en Base64 se conectan usando dos puntos (:) para formar un par clave-valor. Todos los pares clave-valor se separan con una coma (,) y se colocan en la cabecera x-obs-persistent-headers. A continuación, el servidor decodifica el valor cargado. Ejemplo: x-obs-persistent-headers: key1:dmFsdWUx,key2:dmFsdWUy El encabezado devuelto para descargar el objeto de destino u obtener los metadatos del objeto de destino es key1:value1 or key2:value2, respectivamente. Restricciones: 1. Los encabezados de respuesta definidos por el usuario especificados de esta manera no pueden tener el prefijo x-obs-, es decir, puede usar key1, en lugar de x-obs-key1, como prefijo. 2. No se puede usar el encabezado HTTP estándar, por ejemplo, host/content-md5/origin/range/Content-Disposition. 3. La longitud total del encabezado y los metadatos definidos por el usuario no puede superar los 8 KB. 4. Si se transfieren las mismas claves, separe los valores con comas (,) y coloque estos valores en la misma clave para el retorno. 5. Si el objeto de origen ya tiene un encabezado de respuesta definido por el usuario, el encabezado de respuesta no se copiará en el objeto de destino. |
No |
x-obs-website-redirect-location |
Si un bucket está configurado con la función de alojamiento de sitios web estático, redirigirá las solicitudes para este objeto a otro objeto en el mismo bucket o a una URL externa. OBS almacena el valor de este encabezado en los metadatos del objeto. Type: string No hay ningún valor predeterminado. Restricción: el valor debe tener el prefijo de una barra diagonal (/), http://, o https://. La longitud del valor no puede superar los 2 KB. |
No |
x-obs-server-side-encryption |
Indica que se utiliza SSE-KMS. Los objetos se cifran mediante SSE-KMS. Type: string Ejemplo: x-obs-server-side-encryption:kms |
Si cualquier proceso es anormal: Este encabezado es necesario cuando se utiliza SSE-KMS. |
x-obs-server-side-encryption-kms-key-id |
Indica el ID de clave principal de un objeto cifrado. Este encabezado se utiliza en modo SSE-KMS. Si el cliente no proporciona el ID de clave principal, se utilizará el ID de clave principal por defecto. Type: string Se admiten los dos formatos siguientes: 1.regionID:domainID:key/key_id 2. 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 creado en DEW. Ejemplo: 1. x-obs-server-side-encryption-kms-key-id: region:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0 or 2.x-obs-server-side-encryption-kms-key-id:4f1cd4de-ab64-4807-920a-47fc42e7f0d0 |
No |
x-obs-server-side-encryption-customer-algorithm |
Algoritmo de encriptación. La cabecera se utiliza en modo SSE-C. Type: string Ejemplo: x-obs-server-side-encryption-customer-algorithm:AES256 Restricciones: Este encabezado debe usarse junto con x-obs-server-side-encryption-customer-key y x-obs-server-side-encryption-customer-key-MD5. |
No. Esta cabecera es necesaria cuando se usa SSE-C. |
x-obs-server-side-encryption-customer-key |
Indica la clave utilizada para cifrar un objeto. La cabecera se utiliza en modo SSE-C. Type: string Ejemplo: x-obs-server-side-encryption-customer-key:K7QkYpBkM5+hcs27fsNkUnNVaobncnLht/rCB2o/9Cw= Restricciones: Este encabezado es una clave de 256 bits codificada en base64 y debe usarse junto con x-obs-server-side-encryption-customer-algorithm y x-obs-server-side-encryption-customer-key-MD5. |
No. Esta cabecera es necesaria cuando se usa SSE-C. |
x-obs-server-side-encryption-customer-key-MD5 |
Indica el valor MD5 de una clave utilizada para cifrar un objeto de destino. La cabecera se utiliza en modo SSE-C. El valor MD5 se utiliza para comprobar si se produce algún error durante la transmisión de la clave. Type: string Ejemplo: x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ== Restricciones: Este encabezado es una string codificada en Base64 de 128 bits y debe usarse junto con x-obs-server-side-encryption-customer-algorithm y x-obs-server-side-encryption-customer-key. |
No. Esta cabecera es necesaria cuando se usa SSE-C. |
x-obs-copy-source-server-side-encryption-customer-algorithm |
Indica el algoritmo utilizado para descifrar un objeto de origen. La cabecera se utiliza en modo SSE-C. Type: string Ejemplo: x-obs-copy-source-server-side-encryption-customer-algorithm:AES256 Restricciones: Este encabezado debe usarse junto con x-obs-copy-source-server-side-encryption-customer-key y x-obs-copy-source-server-side-encryption-customer-key-MD5. |
No. Este encabezado es necesario cuando se utiliza SSE-C para copiar un objeto de origen. |
x-obs-copy-source-server-side-encryption-customer-key |
Indica la clave utilizada para descifrar un objeto de origen. La cabecera se utiliza en modo SSE-C.SSE-C mode. Type: string Ejemplo: x-obs-copy-source-server-side-encryption-customer-key:K7QkYpBkM5+hcs27fsNkUnNVaobncnLht/rCB2o/9Cw= Restricciones: Este encabezado es una clave de 256 bits codificada en Base64 y debe usarse junto con x-obs-copy-source-server-side-encryption-customer-algorithm y x-obs-copy-source- servidor-encryption-cliente-clave-MD5. |
No. Este encabezado es necesario cuando se utiliza SSE-C para copiar un objeto de origen. |
x-obs-copy-source-server-side-encryption-customer-key-MD5 |
Indica el valor MD5 de la clave utilizada para descifrar un objeto de origen. La cabecera se utiliza en modo SSE-C. El valor MD5 se utiliza para comprobar si se produce algún error durante la transmisión de la clave. Type: string Ejemplo: x-obs-copy-source-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ== Restricciones: Este encabezado es una string codificada en Base64 de 128 bits y debe usarse junto con x-obs-copy-source-server-side-encryption-customer-algorithm y x-obs-copy-source- servidor-encryption-cliente-clave-MD5. |
No. Este encabezado es necesario cuando se utiliza SSE-C para copiar un objeto de origen. |
success_action_redirect |
Indica la dirección (URL) a la que se redirige una solicitud respondida correctamente.
Type: string |
No |
Para obtener más información sobre otros encabezados, consulte Tabla 3.
Elementos de solicitud.
Esta solicitud no contiene elemento.
Sintaxis de respuesta
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> |
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 2.
Encabezado |
Descripción |
---|---|
x-obs-copy-source-version-id |
ID de versión del objeto de origen Tipo: string |
x-obs-version-id |
ID de versión del objeto de destino 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 |
x-obs-server-side-encryption-customer-key-MD5 |
Indica el valor MD5 de una clave utilizada para cifrar objetos. Este encabezado se incluye en una respuesta si se utiliza SSE-C. Tipo: string Ejemplo: x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ== |
x-obs-storage-class |
Este encabezado se devuelve cuando la clase de almacenamiento de un objeto no es Standard. Opciones de valor: WARM y COLD Tipo: string |
Elementos de respuesta
Esta respuesta contiene elementos de un resultado de copia. Tabla 3 describe los elementos.
Elemento |
Descripción |
---|---|
CopyObjectResult |
Contenedor para el resultado de la copia Tipo: XML |
LastModified |
Última hora en la que se modificó el objeto Tipo: string |
ETag |
Resumen MD5 de 128 bits del código Base64 de un nuevo objeto. ETag es el identificador único del contenido del objeto. Se puede utilizar para identificar si se ha cambiado el contenido del objeto. Por ejemplo, si el valor ETag es A cuando se carga un objeto y el valor ETag ha cambiado a B cuando se descarga el objeto, indica que se cambia el contenido del objeto. Tipo: string |
Respuestas de error
No se devuelven respuestas de error especiales. Para obtener más información sobre las respuestas de error, consulte Tabla 2.
Solicitud de muestra 1
Copie el objeto srcobject en el bucket al objeto destobject en el 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 |
Respuesta de muestra 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> |
Solicitud de muestra 2
Copie un objeto multiversión y copie el objeto srcobject cuyo número de versión es AAABQ4uBLdLc0vycq3gAAAAEVURTRkha en el bucket bucket al objeto destobject en el 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 |
Respuesta de muestra 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> |