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. Puede 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.
Una copia de objeto puede tener un tamaño de hasta 5 GB. Si el tamaño del objeto de origen supera los 5 GB, solo puede copiar la parte del objeto.
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 copia se realiza correctamente. Si el cuerpo contiene ETag, la copia se realiza correctamente. De lo contrario, la copia falló.
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 ID de la versión del objeto es null.
Cuando el estado de control de versiones del bucket está deshabilitado, si realiza una copia de object_A y la guarda como object_B y ya existe un objeto denominado object_B, el nuevo object_B sobrescribirá al existente. Después de que la copia se ejecuta correctamente, solo se puede descargar el nuevo object_B porque el antiguo object_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.
WORM
Si un bucket tiene WORM habilitado, puede configurar políticas de retención para objetos en el bucket. Puede especificar los encabezados x-obs-object-lock-mode y x-obs-object-lock-retain-until-date para configurar una política de retención al copiar un objeto. Si no especifica estos dos encabezados pero ha configurado una política WORM predeterminada a nivel de bucket, esta política predeterminada se aplica automáticamente al objeto recién copiado. También puede configurar o actualizar una política de retención de WORM después de copiar un objeto en el bucket.
En una operación de copia, el estado de protección de objeto no se copia, por lo que el estado de protección de una copia de objeto es independiente del estado del objeto de origen. Una vez completada la copia, los cambios de retención de WORM realizados en el objeto de origen no afectan a la copia del objeto.
Objetos de Archive o Deep Archive
Si los objetos de origen están en la clase de almacenamiento Archive o Deep Archive, asegúrese de que estos objetos se han restaurado antes de copiarlos. Si un objeto de origen no se restaura o se está restaurando, su copia fallará y se devolverá 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 parámetros de mensaje.
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 configurar la ACL del objeto mediante las políticas comunes predefinidas, incluidas private, public-read y public-read-write. Para obtener más información sobre cada política, consulte "Configuración de una ACL mediante campos de encabezado" en ACLs. Tipo: string Ejemplo: x-obs-acl: acl |
No |
x-obs-grant-read |
Al crear un objeto, puede utilizar este encabezado para conceder a todos los usuarios de una cuenta los permisos para leer el objeto y obtener los metadatos del objeto. Tipo: string |
No |
x-obs-grant-read-acp |
Al crear un objeto, puede utilizar este encabezado para conceder a todos los usuarios de una cuenta el permiso para obtener la ACL del objeto. Tipo: string |
No |
x-obs-grant-write-acp |
Al crear un objeto, puede utilizar este encabezado para conceder a todos los usuarios de una cuenta el permiso para escribir la ACL de destino. Tipo: string |
No |
x-obs-grant-full-control |
Al crear un objeto, puede utilizar este encabezado para conceder a todos los usuarios de una cuenta los permisos para leer el objeto, obtener los metadatos del objeto y la ACL, y escribir la ACL del objeto. Tipo: 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. Tipo: string Restricción: la codificación de URL es necesaria para manejar caracteres de ancho completo y %. 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. Tipo: string Valores válidos: COPY y REPLACE Valor predeterminado: COPY Ejemplo: x-obs-metadata-directive: metadata_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). Tipo: 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 solo si su ETag no coincide con la especificada en este encabezado. De lo contrario, se devuelve un error de código de estado HTTP 412 (precondición fallida). Tipo: string Ejemplo: x-obs-copy-source-if-none-match: etag Restricción: Este parámetro se puede usar con x-obs-copy-source-if-modified-since pero no con otros parámetros de copia condicional. |
No |
x-obs-copy-source-if-unmodified-since |
Indica que el objeto de origen solo se copia si no se ha modificado desde el tiempo especificado por este encabezado. De lo contrario, se devuelve el código de error 412 (condición previa 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 Formato: cadena de tiempo HTTP que cumple con el formato especificado en http://www.ietf.org/rfc/rfc2616.txt que puede ser cualquiera de los siguientes:
Ejemplos:
Restricción: el tiempo especificado por este encabezado no puede ser posterior a la hora actual del servidor (hora GMT), o este encabezado no tiene efecto. |
No |
x-obs-copy-source-if-modified-since |
Indica que el objeto de origen solo se copia si se ha modificado desde el tiempo especificado por este encabezado. De lo contrario, se devuelve el código de error 412 (condición previa 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 Formato: cadena de tiempo HTTP que cumple con el formato especificado en http://www.ietf.org/rfc/rfc2616.txt que puede ser cualquiera de los siguientes:
Ejemplos:
Restricción: el tiempo especificado por este encabezado no puede ser posterior a la hora actual del servidor (hora GMT), o este encabezado no tiene efecto. |
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. Tipo: string Opciones de clase de almacenamiento: STANDARD (Standard), WARM (Infrequent Access), COLD (Archive). 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. Tipo: 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 el encabezado 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:
|
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. Tipo: string Valor predeterminado: ninguno 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. Tipo: string Ejemplo: x-obs-server-side-encryption: kms |
No. Este encabezado es necesario cuando se utiliza SSE-KMS. |
x-obs-server-side-encryption-kms-key-id |
Indica la clave principal para cifrar la copia de objeto cuando se utiliza SSE-KMS. Si no se proporciona este encabezado, se utilizará la clave principal predeterminada. Si no existe una clave principal por defecto, OBS creará una y la usará por defecto. Tipo: string Se admiten los dos formatos siguientes: - regionID:domainID:key/key_id 2.key_id regionID indica el ID de la región a la que pertenece la clave. domainID indica el ID del tenant al que pertenece la clave. key_id indica el ID de la clave creada en DEW. Ejemplo: - x-obs-server-side-encryption-kms-key-id: region:domainiddomainiddomainiddoma0001:key/4f1cd4de-ab64-4807-920a-47fc42e7f0d0 - x-obs-server-side-encryption-kms-key-id: 4f1cd4de-ab64-4807-920a-47fc42e7f0d0 |
No |
x-obs-server-side-encryption-customer-algorithm |
Indica el algoritmo de encriptación para la copia de objeto cuando se utiliza SSE-C. Tipo: string Ejemplo: x-obs-server-side-encryption-customer-algorithm: AES256 Restricción: Este encabezado debe usarse junto con x-obs-server-side-encryption-customer-key y x-obs-server-side-encryption-customer-key-MD5. |
No. Este encabezado se requiere cuando se utiliza SSE-C. |
x-obs-server-side-encryption-customer-key |
Indica la clave para cifrar la copia de objeto cuando se utiliza SSE-C. Tipo: string Ejemplo: x-obs-server-side-encryption-customer-key:K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw= Restricción: 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. Este encabezado se requiere cuando se utiliza SSE-C. |
x-obs-server-side-encryption-customer-key-MD5 |
Indica el valor MD5 de la clave para cifrar la copia de objeto cuando se utiliza SSE-C. El valor MD5 se utiliza para comprobar si se produce algún error durante la transmisión de la clave. Tipo: string Ejemplo: x-obs-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ== Restricción: Este encabezado es un valor MD5 de 128 bits codificado en Base64 y debe usarse junto con x-obs-server-side-encryption-customer-algorithm y x-obs-server-side-encryption-customer-key. |
No. Este encabezado se requiere cuando se utiliza SSE-C. |
x-obs-copy-source-server-side-encryption-customer-algorithm |
Indica el algoritmo para descifrar el objeto de origen cuando se utiliza SSE-C. Tipo: string Ejemplo: x-obs-copy-source-server-side-encryption-customer-algorithm: AES256 Restricción: 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 para descifrar el objeto de origen cuando se utiliza SSE-C. Tipo: string Ejemplo: x-obs-copy-source-server-side-encryption-customer-key: K7QkYpBkM5+hca27fsNkUnNVaobncnLht/rCB2o/9Cw= Restricción: 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-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-MD5 |
Indica el valor MD5 de la clave para descifrar el objeto de origen cuando se utiliza SSE-C. El valor MD5 se utiliza para comprobar si se produce algún error durante la transmisión de la clave. Tipo: string Ejemplo: x-obs-copy-source-server-side-encryption-customer-key-MD5:4XvB3tbNTN+tIEVa0/fGaQ== Restricción: Este encabezado es un valor MD5 de 128 bits codificado en Base64 y debe usarse junto con x-obs-copy-source-server-side-encryption-customer-algorithm y x-obs-copy-source-server-side-encryption-customer-key. |
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.
Tipo: string |
No |
x-obs-object-lock-mode |
Modo de WORM que se aplicará al objeto. Actualmente, solo se admite COMPLIANCE. Este encabezado debe usarse junto con x-obs-object-lock-retain-until-date. Tipo: string Ejemplo: x-obs-object-lock-mode:COMPLIANCE |
No, pero es necesario cuando x-obs-object-lock-retain-until-date está presente. |
x-obs-object-lock-retain-until-date |
Indica el tiempo de caducidad de la retención de Object Lock. El valor debe ser una hora UTC que cumpla con la norma ISO 8601, por ejemplo 2015-07-01T04:11:15Z. Este encabezado debe usarse junto con x-obs-object-lock-mode. Tipo: string Ejemplo: x-obs-object-lock-retain-until-date:2015-07-01T04:11:15Z |
No, pero es necesario cuando x-obs-object-lock-mode está presente. |
Para obtener más información sobre otros encabezados, consulte Tabla 3.
Elementos de solicitud
Esta solicitud no contiene elementos.
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, los encabezados de mensaje enumerados en Tabla 2 puede ser usado.
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 cuando se usa SSE-KMS. Tipo: string Formato: regionID:domainID:key/key_id regionID indica el ID de la región a la que pertenece la clave. domainID indica el ID del tenant al que pertenece la clave. key_id indica 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 el algoritmo de encriptación. Este encabezado se incluye en una respuesta cuando se usa 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 la clave para cifrar objetos. Este encabezado se incluye en una respuesta cuando se usa 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. El valor puede ser WARM o 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 determinar si se cambia el contenido del objeto. Por ejemplo, si el valor ETag es A cuando se carga un objeto, pero este valor ha cambiado a B cuando se descarga el objeto, indica que se ha cambiado 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.
Ejemplo de solicitud: Copia de un objeto
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 |
Ejemplo de respuesta: copia de un objeto
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> |
Ejemplo de solicitud: Copia de una versión de objeto
Copie un objeto multiversión y 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 |
Ejemplo de respuesta: copia de una versión de objeto
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/XKTT4NmZspzharwp5Z74ybAYVOgr 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> |