Todos los productos
Search
Centro de documentos

Object Storage Service:Copiar un objeto (SDK de Ruby)

Última actualización: Sep 22, 2026

Este tema describe cómo copiar un objeto desde un bucket de origen hacia el mismo bucket o hacia uno de destino distinto dentro de la misma región.

Notas

  • En este tema se utiliza el endpoint público de la región China (Hangzhou). Para acceder a OSS desde otros servicios de Alibaba Cloud en la misma región, utilice un endpoint interno. Para obtener más información sobre las regiones y los endpoints compatibles, consulte Regions and endpoints.

  • Las credenciales de acceso de este tema se obtienen de variables de entorno. Para obtener más información, consulte 配置访问凭证.

  • Aquí se muestra cómo crear una instancia de OSSClient con un endpoint de OSS. Para conocer configuraciones alternativas, como usar un dominio personalizado o autenticarse con credenciales de Security Token Service (STS), consulte Client configuration.

  • Es obligatorio contar con permisos de lectura sobre el objeto de origen y permisos de lectura y escritura en el bucket de destino.

  • Los buckets de origen y de destino no deben tener políticas de retención configuradas. De lo contrario, la copia falla y se devuelve el error The object you specified is immutable..

  • No se admite la copia entre distintas regiones. Por ejemplo, no es posible copiar un objeto de un bucket en China (Hangzhou) a otro en China (Qingdao).

Permisos

De forma predeterminada, una cuenta de Alibaba Cloud tiene todos los permisos. Los usuarios o roles de RAM asociados a una cuenta no cuentan con ningún permiso de manera predeterminada. La cuenta de Alibaba Cloud o su administrador deben otorgar los permisos de operación correspondientes 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

Si especifica la versión del objeto de origen mediante versionId, también se requiere este permiso.

oss:GetObjectTagging

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

oss:PutObjectTagging

oss:GetObjectVersionTagging

También se necesita este permiso cuando especifica las etiquetas de una versión concreta del objeto de origen mediante versionId.

kms:GenerateDataKey

Ambos permisos son necesarios si, al copiar un objeto, los metadatos del objeto de destino incluyen X-Oss-Server-Side-Encryption: KMS.

kms:Decrypt

Código de ejemplo

Use bucket.copy_object para copiar un objeto y especifique sus metadatos con el parámetro :meta_directive. Durante la operación de copia, los metadatos del objeto se gestionan de alguna de estas maneras:

  • Si no especifica el parámetro meta, los metadatos del objeto de destino serán idénticos a los del objeto de origen.

  • Si especifica el parámetro meta, los metadatos del objeto de origen se sobrescriben con los nuevos valores.

A continuación se muestra el código para copiar un objeto:

require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
  # Specify the Endpoint for the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# Specify the bucket name. Example: examplebucket.
bucket = client.get_bucket('examplebucket')

# Copy the object and its metadata.
bucket.copy_object(
  # In this example, srcobject.txt is copied as destobject.txt.
  'destobject.txt', 'srcobject.txt',
  :meta_directive => Aliyun::OSS::MetaDirective::COPY)

# Copy the object and overwrite its metadata.
bucket.copy_object(
  'destobject.txt', 'srcobject.txt',
  :metas => {'year' => '2017'},
  :meta_directive => Aliyun::OSS::MetaDirective::REPLACE)            

Referencias

Para obtener más información sobre la operación de API CopyObject, consulte CopyObject.