Este tópico descreve como usar o método CopyObject do OSS SDK for Harmony para copiar um objeto com tamanho inferior a 5 GiB de um bucket de origem para um bucket de destino na mesma região. O bucket de destino pode ser o próprio bucket de origem ou um bucket diferente.
Observações
Para mais informações sobre regiões e endpoints compatíveis, consulte OSS regions and endpoints.
Para copiar um objeto, você deve ter permissão de leitura no objeto de origem e permissões de leitura e gravação no bucket de destino.
Os buckets de origem e de destino devem estar na mesma região. Por exemplo, não é possível copiar objetos de um bucket na região China (Hangzhou) para um bucket na região China (Qingdao).
Certifique-se de que os buckets de origem e de destino não possuam políticas de retenção configuradas. Caso contrário, o sistema retornará a mensagem de erro The object you specified is immutable..
Permissões
Por padrão, uma conta Alibaba Cloud tem acesso total. Usuários RAM e funções RAM associados a uma conta Alibaba Cloud não têm 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 RAM policies ou Bucket Policy.
|
API |
Ação |
Descrição |
|
CopyObject |
|
Copia objetos dentro de um bucket ou entre buckets na mesma região. |
|
|
||
|
|
Caso especifique a versão do objeto de origem por meio do versionId, esta permissão também é necessária. |
|
|
|
Se você copiar as tags do objeto usando x-oss-tagging, estas permissões são necessárias. |
|
|
|
||
|
|
Caso especifique as tags de uma versão específica do objeto de origem por meio do versionId, esta permissão também é necessária. |
|
|
|
Ao copiar um objeto, se os metadados do objeto de destino contiverem X-Oss-Server-Side-Encryption: KMS, estas duas permissões serão necessárias. |
|
|
|
Código de exemplo
Confira a seguir um exemplo de código para copiar objetos dentro do mesmo bucket.
import Client, { RequestError } from '@aliyun/oss';
// Create an OSSClient instance.
const client = new Client({
// Specify the AccessKey ID obtained from Security Token Service (STS).
accessKeyId: 'yourAccessKeyId',
// Specify the AccessKey secret obtained from STS.
accessKeySecret: 'yourAccessKeySecret',
// Specify the security token obtained from STS.
securityToken: 'yourSecurityToken',
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
region: 'oss-cn-hangzhou',
});
/**
* Copy an object to the same bucket.
* Use the copyObject method to copy the source object to the destination object.
*/
const copyObject = async () => {
try {
// Use the copyObject method to copy an object to the same bucket.
const res = await client.copyObject({
bucket: 'targetBucket', // Name of the destination bucket.
key: 'targetKey', // Name of the destination object.
copySourceKey: 'sourceKey', // Name of the source object.
});
// Output the result.
console.log(JSON.stringify(res));
} catch (err) {
// Capture exceptions.
if (err instanceof RequestError) {
console.log('code: ', err.code); // Error code.
console.log('message: ', err.message); // Error message.
console.log('requestId: ', err.requestId); // Request ID.
console.log('status: ', err.status); // HTTP status code.
console.log('ec: ', err.ec); // EC
} else {
console.log('unknown error: ', err);
}
}
};
// Call the copyObject function to copy the object to the same bucket.
copyObject();