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

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.

Tabla 1 Encabezados de solicitud

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

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.

  • Si el valor es válido y la solicitud se realiza correctamente, OBS devuelve el código de estado 303. Location contiene success_action_redirect, así como el nombre del bucket, el nombre del objeto y el objeto ETag.
  • Si este parámetro no es válido, OBS omite este parámetro. El código de respuesta es 204, y Location es la dirección del objeto.

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.

Tabla 2 Parámetros de cabecera de respuesta adicionales

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.

Tabla 3 Elementos de respuesta

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>