Este tópico descreve como copiar um objeto de um bucket de origem para o mesmo bucket ou para um bucket de destino diferente na mesma região.
Observações
Neste tópico, utiliza-se o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para obter detalhes sobre as regiões e endpoints suportados, consulte Regiões e endpoints.
As credenciais de acesso neste tópico são obtidas de variáveis de ambiente. Para mais informações, consulte Configurar credenciais de acesso.
Este tópico demonstra a criação de uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como o uso de domínio personalizado ou autenticação com credenciais do Security Token Service (STS), consulte Configuração do cliente.
É necessário ter permissões de leitura no objeto de origem e permissões de leitura/gravação no bucket de destino.
Os buckets de origem e de destino não devem ter políticas de retenção configuradas. Caso contrário, a cópia falhará e o erro The object you specified is immutable. será retornado.
Não há suporte para cópia entre regiões. Por exemplo, não é possível copiar um objeto de um bucket em China (Hangzhou) para um bucket em China (Qingdao).
Permissões
Por padrão, uma conta Alibaba Cloud possui permissões totais. Usuários RAM ou funções RAM vinculados a uma conta Alibaba Cloud não possuem permissões por padrão. A conta Alibaba Cloud ou o administrador da conta deve conceder as permissões de operação por meio de políticas do RAM ou Bucket Policy.
|
API |
Ação |
Descrição |
|
CopyObject |
|
Copia objetos dentro de um bucket ou entre buckets na mesma região. |
|
|
||
|
|
Se você especificar a versão do objeto de origem via versionId, esta permissão também será necessária. |
|
|
|
Ao copiar tags de objeto via x-oss-tagging, estas permissões são obrigatórias. |
|
|
|
||
|
|
Caso especifique as tags de uma versão específica do objeto de origem através do versionId, esta permissão também é exigida. |
|
|
|
Durante a cópia de um objeto, se os metadados do objeto de destino contiverem X-Oss-Server-Side-Encryption: KMS, ambas as permissões serão necessárias. |
|
|
|
Código de exemplo
Utilize bucket.copy_object para copiar um objeto e definir seus metadados com o parâmetro :meta_directive. Durante a operação de cópia, é possível tratar os metadados do objeto das seguintes formas:
Sem a definição do parâmetro meta, os metadados do objeto de destino permanecem idênticos aos do objeto de origem.
Ao especificar o parâmetro meta, os metadados originais são substituídos pelos novos valores fornecidos.
O código abaixo ilustra como realizar a cópia de um 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)
Referências
Para mais detalhes sobre a operação da API CopyObject, consulte CopyObject.