La operación CopyObject le permite copiar un objeto entre buckets de la misma región, ya sea dentro del mismo bucket o en buckets distintos.
Control de versiones
De forma predeterminada, x-oss-copy-source copia la versión actual de un objeto. Para copiar una versión específica, incluya el identificador de versión en x-oss-copy-source. Si la versión de origen especificada es un marcador de eliminación, OSS devuelve un error 404 que indica que el objeto no existe.
Para restaurar una versión anterior de un objeto como versión actual, copie dicha versión anterior al mismo bucket. OSS establece automáticamente esa versión anterior como la versión actual.
Si el control de versiones está habilitado en el bucket de destino, OSS genera automáticamente un identificador de versión único para el objeto recién copiado. Este identificador se devuelve en el encabezado de respuesta x-oss-version-id. Si el control de versiones está deshabilitado o suspendido en el bucket de destino, OSS genera una versión con un identificador nulo para el nuevo objeto. Esta nueva versión sobrescribe cualquier versión existente que tenga un identificador de versión nulo.
Límites
-
Límites de tamaño de objeto
Si los buckets de origen y destino son el mismo, y no modifica el método de cifrado ni la clase de almacenamiento del objeto durante la copia, el objeto puede superar los 5 GB.
Si los buckets de origen y destino son distintos, y no modifica el método de cifrado ni la clase de almacenamiento del objeto durante la copia, el objeto no puede superar los 5 GB.
Si modifica el método de cifrado o la clase de almacenamiento del objeto durante la copia, el objeto no puede superar 1 GB. En caso de que supere este tamaño, debe usar la operación UploadPartCopy.
-
Permisos
Las operaciones CopyObject y UploadPartCopy requieren permisos de lectura sobre el objeto de origen.
-
Si utiliza la operación CopyObject en un bucket con el control de versiones deshabilitado, y los objetos de origen y destino son el mismo:
Si no se modifica el método de cifrado ni la clase de almacenamiento, OSS solo actualiza los metadatos del objeto sin copiar su contenido.
Si se modifica el método de cifrado o la clase de almacenamiento, OSS actualiza los metadatos y también copia el contenido del objeto.
-
El objeto de origen es un enlace simbólico
Si aplica la operación CopyObject a un enlace simbólico, solo se copia dicho enlace. El contenido del archivo al que apunta el enlace simbólico no se copia.
-
El espacio de nombres jerárquico está habilitado en el bucket
Si el espacio de nombres jerárquico está habilitado en el bucket, no es posible copiar directorios.
-
Prevención de conflictos por sobrescritura de archivos
Si habilita Prevent File Overwrite, no puede usar CopyObject para cambiar la clase de almacenamiento de un archivo, por ejemplo, de Standard a Archive Storage. En su lugar, utilice la conversión automática mediante reglas de ciclo de vida.
Permisos
De forma predeterminada, una cuenta de Alibaba Cloud tiene todos los permisos. Los usuarios o roles de RAM asociados a una cuenta de Alibaba Cloud no cuentan con ningún permiso de manera predeterminada. La cuenta de Alibaba Cloud o el administrador de la cuenta deben otorgar los permisos de operación mediante RAM policies o Bucket Policy.
|
API |
Action |
Descripción |
|
CopyObject |
|
Copia objetos dentro de un mismo bucket o entre buckets de la misma región. |
|
|
||
|
|
Este permiso también es obligatorio si especifica la versión del objeto de origen mediante versionId. |
|
|
|
Estos permisos son obligatorios si copia las etiquetas del objeto mediante x-oss-tagging. |
|
|
|
||
|
|
Este permiso también es obligatorio si especifica las etiquetas de una versión concreta del objeto de origen mediante versionId. |
|
|
|
Estos dos permisos son obligatorios cuando los metadatos del objeto de destino contienen X-Oss-Server-Side-Encryption: KMS durante la copia de un objeto. |
|
|
|
Facturación
Cada llamada a la operación CopyObject cuenta como una solicitud PUT para el bucket de destino.
La operación CopyObject incrementa el uso de almacenamiento del bucket de destino.
Cambiar la clase de almacenamiento de un objeto con CopyObject implica sobrescribir datos. Por ejemplo, si sobrescribe un objeto Infrequent Access (IA) y cambia su clase de almacenamiento a Standard antes de que transcurran 10 días desde su creación, se cobra una tarifa equivalente a 20 días de almacenamiento IA porque no se cumplió la duración mínima de almacenamiento. Para obtener más información sobre las tarifas de almacenamiento, consulte Storage fees.
Al llamar a la operación CopyObject, si el objeto de origen es de tipo IA, se genera una tarifa de recuperación de datos para almacenamiento IA. Si el objeto de origen pertenece a Archive Storage, no se ha restaurado con RestoreObject y el acceso en tiempo real a objetos de Archive está habilitado en el bucket, se genera una tarifa de recuperación de datos por acceso en tiempo real. Estos cargos se aplican a la cuenta propietaria del bucket de origen. Para obtener más información sobre la facturación, consulte Data processing fees.
Sintaxis de la solicitud
PUT /DestObjectName HTTP/1.1
Host: DestBucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectName
Encabezados de la solicitud
Todos los encabezados de solicitud de una operación de copia comienzan con x-oss-. Por lo tanto, debe agregar todos estos encabezados de solicitud a la cadena de firma.
Nombre | Tipo | Obligatorio | Valor | Descripción |
x-oss-forbid-overwrite | String | No | true | Indica si se permite sobrescribir un objeto de destino existente que tenga el mismo nombre. Si el control de versiones está habilitado o suspendido en el bucket de destino, el encabezado de solicitud x-oss-forbid-overwrite no surte efecto. Esto significa que se permite sobrescribir un objeto con el mismo nombre.
Configurar el encabezado de solicitud x-oss-forbid-overwrite reduce el rendimiento de procesamiento de QPS. Si necesita utilizar el encabezado de solicitud x-oss-forbid-overwrite en muchas operaciones (QPS > 1000), póngase en contacto con el soporte técnico para evitar afectar su negocio. Valor predeterminado: false |
x-oss-copy-source | String | Sí | /oss-example/oss.jpg | Especifica la dirección de origen para la operación de copia. Valor predeterminado: none |
x-oss-copy-source-if-match | String | No | 5B3C1A2E053D763E1B002CC607C5**** | La operación de copia se ejecuta y se devuelve 200 OK únicamente si el ETag del objeto de origen coincide con el ETag proporcionado. Valor predeterminado: none |
x-oss-copy-source-if-none-match | String | No | 5B3C1A2E053D763E1B002CC607C5**** | La operación de copia se ejecuta y se devuelve 200 OK únicamente si el ETag del objeto de origen no coincide con el ETag proporcionado. Valor predeterminado: none |
x-oss-copy-source-if-unmodified-since | String | No | Mon, 11 May 2020 08:16:23 GMT | El objeto se copia y se devuelve 200 OK únicamente si la hora especificada es igual o posterior a la hora de modificación real del objeto. Valor predeterminado: none |
x-oss-copy-source-if-modified-since | String | No | Mon, 11 May 2020 08:16:23 GMT | El objeto se copia y se devuelve 200 OK únicamente si la hora especificada es anterior a la hora de modificación real del objeto. Valor predeterminado: none |
x-oss-metadata-directive | String | No | COPY | Define cómo se configuran los metadatos del objeto de destino.
Importante Si los objetos de origen y destino son el mismo y el control de versiones no está habilitado, se ignoran los metadatos del objeto de origen sin importar el valor de x-oss-metadata-directive. El objeto de destino utiliza los metadatos especificados en la solicitud. |
x-oss-server-side-encryption | String | No | AES256 | Especifica el algoritmo de cifrado del lado del servidor que utiliza OSS para crear el objeto de destino. Valores válidos: AES256 y KMS Importante No puede especificar x-oss-server-side-encryption cuando copia un objeto de enlace simbólico. Solo puede utilizar el algoritmo de cifrado KMS después de adquirir un paquete de KMS. De lo contrario, OSS devuelve el error KmsServiceNotEnabled.
|
x-oss-server-side-encryption-key-id | String | No | 9468da86-3509-4f8d-a61e-6eab1eac**** | Especifica la clave maestra del cliente (CMK) administrada por KMS. Este parámetro solo es válido cuando x-oss-server-side-encryption se establece en KMS. |
x-oss-object-acl | String | No | private | Especifica los permisos de acceso del objeto de destino al momento de crearlo en OSS. Valores válidos:
Para obtener más información sobre los permisos de acceso, consulte Object ACL. |
x-oss-storage-class | String | No | Standard | Especifica la clase de almacenamiento del objeto. En un bucket de cualquier clase de almacenamiento, si especifica este encabezado al cargar un objeto, el objeto cargado se almacena con la clase indicada. Por ejemplo, si establece x-oss-storage-class en Standard al cargar un objeto en un bucket IA, el objeto se almacena como Standard. Valores válidos:
Para obtener más información sobre las clases de almacenamiento, consulte Storage classes. |
x-oss-tagging | String | No | a:1 | Especifica las etiquetas del objeto. Puede especificar varias etiquetas al mismo tiempo, por ejemplo, TagA=A&TagB=B. Nota La clave y el valor deben codificarse con URL. Si un elemento no contiene un signo igual (=), el valor se considera una cadena vacía. |
x-oss-tagging-directive | String | No | Copy | Define cómo se configuran las etiquetas del objeto de destino. Valores válidos:
|
Esta operación también utiliza encabezados de solicitud comunes, como Host y Date. Para obtener más información, consulte Common request headers.
Encabezados de la respuesta
Esta operación solo utiliza encabezados de respuesta comunes. Para obtener más información, consulte Common response headers.
Elementos de la respuesta
|
Nombre |
Tipo |
Ejemplo |
Descripción |
|
CopyObjectResult |
Container |
N/A |
Contenedor para los resultados de la operación CopyObject. Valor predeterminado: none |
|
ETag |
String |
5B3C1A2E053D763E1B002CC607C5**** |
El ETag del objeto de destino. Elemento padre: CopyObjectResult |
|
LastModified |
String |
Fri, 24 Feb 2012 07:18:48 GMT |
La hora de la última actualización del objeto de destino. Elemento padre: CopyObjectResult |
Ejemplos
-
Control de versiones deshabilitado
Solicitud de ejemplo
PUT /test%2FAK.txt HTTP/1.1 Host: tesx.oss-cn-zhangjiakou.aliyuncs.com Accept-Encoding: identity User-Agent: aliyun-sdk-python/2.6.0(Windows/7/AMD64;3.7.0) Accept: text/html Connection: keep-alive x-oss-copy-source: /test/AK.txt date: Fri, 28 Dec 2018 09:41:55 GMT authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e Content-Length: 0Respuesta de ejemplo
x-oss-hash-crc64ecmaindica el valor CRC de 64 bits del objeto. Este valor CRC de 64 bits se calcula según el estándar CRC-64/XZ. La operación CopyObject no garantiza que el objeto generado tenga un valor CRC de 64 bits.HTTP/1.1 200 OK Server: AliyunOSS Date: Fri, 28 Dec 2018 09:41:56 GMT Content-Type: application/xml Content-Length: 184 Connection: keep-alive x-oss-request-id: 5C25EFE4462CE00EC6D87156 ETag: "F2064A169EE92E9775EE5324D0B1****" x-oss-hash-crc64ecma: 12753002859196105360 x-oss-server-time: 150 <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"F2064A169EE92E9775EE5324D0B1****"</ETag> <LastModified>2018-12-28T09:41:56.000Z</LastModified> </CopyObjectResult> -
Copiar un objeto sin especificar un identificador de versión
Solicitud de ejemplo
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e x-oss-copy-source: /versioning-copy-source/source-objectRespuesta de ejemplo
En este ejemplo,
x-oss-copy-source-version-ides el identificador de versión del objeto de origen, que en este caso corresponde a la versión actual.x-oss-version-ides el identificador de versión del objeto recién copiado.HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgIC28uaA0BYiIDY5OGIwNmNlNjYyMTRjNTc4N2M2OGNiMjZkZTQ2**** x-oss-version-id: CAEQNxiBgIDG8uaA0BYiIGZhZDRkZTk5Zjg3YzRhNzdiMWEwZGViNDM1NTFh**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C81E728D9D4C2F636F067F89CC14****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult> -
Copiar un objeto al especificar un identificador de versión
Solicitud de ejemplo
PUT /dest-object-example HTTP/1.1 Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 03:45:32 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e x-oss-copy-source: /versioning-copy-source/source-object?versionId=CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy****Respuesta de ejemplo
En este ejemplo,
x-oss-copy-source-version-ides el identificador de versión del objeto de origen, que corresponde a la versión especificada en el encabezado de solicitudx-oss-copy-source.x-oss-version-ides el identificador de versión del objeto recién copiado.HTTP/1.1 200 OK x-oss-copy-source-version-id: CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy**** x-oss-version-id: CAEQNxiBgMDP8uaA0BYiIDIyNGNhZDQ1M2M3NzRkZThiNzE0N2I3ZDkxOWY4**** x-oss-request-id: 5CAC155CB7AEADE01700**** Content-Type: application/xml Content-Length: 184 Connection: keep-alive Date: Tue, 09 Apr 2019 03:45:32 GMT Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <ETag>"C4CA4238A0B923820DCC509A6F75****"</ETag> <LastModified>2019-04-09T03:45:32.000Z</LastModified> </CopyObjectResult>
SDK
Puede utilizar los kits de desarrollo de software (SDK) de los siguientes lenguajes para llamar a esta operación.
Herramienta de línea de comandos ossutil
Para conocer el comando de ossutil correspondiente a la operación CopyObject, consulte copy-object.
Códigos de error
Código de error | Código de estado HTTP | Descripción |
InvalidArgument | 400 | El valor de un parámetro, como x-oss-storage-class, no es válido. |
Precondition Failed | 412 | Este error se devuelve por uno de los siguientes motivos:
|
Not Modified | 304 | Este error se devuelve por uno de los siguientes motivos:
|
KmsServiceNotEnabled | 403 | Estableció x-oss-server-side-encryption en KMS, pero no adquirió un paquete de KMS. |
FileAlreadyExists | 409 | Este error se devuelve por uno de los siguientes motivos:
|
FileImmutable | 409 | Este error se devuelve si intenta eliminar o modificar datos en un bucket que se encuentra en estado protegido. |
Preguntas frecuentes
¿CopyObject admite la copia por lotes de archivos?
No. La operación CopyObject sirve para copiar un solo archivo. Para copiar varios archivos en lote, utilice ossutil. Para obtener más información, consulte cp (copy files).