Todos los productos
Search
Centro de documentos

Object Storage Service:CopyObject

Última actualización: Sep 15, 2026

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

oss:GetObject

Copia objetos dentro de un mismo bucket o entre buckets de la misma región.

oss:PutObject

oss:GetObjectVersion

Este permiso también es obligatorio si especifica la versión del objeto de origen mediante versionId.

oss:GetObjectTagging

Estos permisos son obligatorios si copia las etiquetas del objeto mediante x-oss-tagging.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Este permiso también es obligatorio si especifica las etiquetas de una versión concreta del objeto de origen mediante versionId.

kms:GenerateDataKey

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.

kms:Decrypt

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.

  • Si no se especifica x-oss-forbid-overwrite o se establece en false, puede sobrescribir un objeto de destino con el mismo nombre.

  • Si establece x-oss-forbid-overwrite en true, no se sobrescribe un objeto de destino existente 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.

  • COPY (predeterminado): copia los metadatos del objeto de origen al objeto de destino.

    OSS no copia la propiedad x-oss-server-side-encryption del objeto de origen al objeto de destino. El método de cifrado del lado del servidor para el objeto de destino depende de si se especifica x-oss-server-side-encryption en la operación de copia.

  • REPLACE: ignora los metadatos del objeto de origen y utiliza los metadatos especificados en la solicitud.

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.

  • Si no se especifica x-oss-server-side-encryption en la operación de copia, el objeto de destino no se cifra del lado del servidor, independientemente de si el objeto de origen estaba cifrado.

  • Si se especifica x-oss-server-side-encryption en la operación de copia, el objeto de destino se cifra del lado del servidor, independientemente de si el objeto de origen estaba cifrado. El encabezado de respuesta de la operación de copia incluye x-oss-server-side-encryption, cuyo valor corresponde al algoritmo de cifrado del objeto de destino.

    Cuando se descarga el objeto de destino, el encabezado de respuesta también incluye x-oss-server-side-encryption, cuyo valor corresponde al algoritmo de cifrado del objeto.

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:

  • default (predeterminado): el objeto hereda los permisos del bucket.

  • private: el objeto es un recurso privado. Solo el propietario del objeto y los usuarios autorizados tienen permisos de lectura y escritura sobre él. Otros usuarios no pueden acceder al objeto.

  • public-read: el objeto es un recurso de lectura pública. Solo el propietario del objeto y los usuarios autorizados tienen permisos de lectura y escritura sobre él. Otros usuarios solo tienen permisos de lectura. Utilice este permiso con precaución.

  • public-read-write: el objeto es un recurso de lectura y escritura públicas. Todos los usuarios tienen permisos de lectura y escritura sobre él. Utilice este permiso con precaución.

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:

  • Standard (predeterminado): Standard

  • IA: Infrequent Access

  • Archive: Archive Storage

  • ColdArchive: Cold Archive

  • DeepColdArchive: Deep Cold Archive

    Importante

    Si copia varios archivos, especificar directamente Deep Cold Archive como clase de almacenamiento para los archivos copiados genera altas tarifas por solicitudes PUT. Se recomienda utilizar una lifecycle rule para migrar los archivos a la clase de almacenamiento Deep Cold Archive y reducir las tarifas de solicitudes PUT.

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:

  • Copy (predeterminado): copia las etiquetas del objeto de origen al objeto de destino.

  • Replace: ignora las etiquetas del objeto de origen y utiliza las etiquetas especificadas en la solicitud.

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: 0

    Respuesta de ejemplo

    x-oss-hash-crc64ecma indica 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-object

    Respuesta de ejemplo

    En este ejemplo, x-oss-copy-source-version-id es el identificador de versión del objeto de origen, que en este caso corresponde a la versión actual. x-oss-version-id es 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-id es el identificador de versión del objeto de origen, que corresponde a la versión especificada en el encabezado de solicitud x-oss-copy-source. x-oss-version-id es 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:

  • Se especificó el encabezado de solicitud x-oss-copy-source-if-match, pero el ETag del objeto de origen no coincide con el ETag proporcionado.

  • Se especificó el encabezado de solicitud x-oss-copy-source-if-unmodified-since, pero la hora especificada es anterior a la hora de modificación real del objeto.

Not Modified

304

Este error se devuelve por uno de los siguientes motivos:

  • Se especificó el encabezado de solicitud x-oss-copy-source-if-none-match, pero el ETag del objeto de origen coincide con el ETag proporcionado.

  • Se especificó el encabezado de solicitud x-oss-copy-source-if-modified-since, pero el objeto de origen no se modificó después de la hora especificada.

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:

  • El encabezado de solicitud incluye x-oss-forbid-overwrite=true para evitar sobrescribir un objeto con el mismo nombre, pero ya existe un objeto con ese nombre en el bucket.

  • La función de espacio de nombres jerárquico está habilitada en el bucket e intenta copiar un objeto donde el origen o el destino es un directorio.

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).