Cette rubrique explique comment utiliser la méthode CopyObject du SDK OSS pour Harmony afin de copier un objet d'une taille inférieure à 5 GiB depuis un bucket source vers un bucket de destination situé dans la même région. Le bucket de destination peut être le bucket source ou un autre bucket.
Notes
Pour plus d'informations sur les régions et les endpoints pris en charge, consultez Régions et endpoints OSS.
Pour copier un objet, vous devez disposer des autorisations de lecture sur l'objet source ainsi que des autorisations de lecture et d'écriture sur le bucket de destination.
Le bucket source et le bucket de destination doivent se trouver dans la même région. Par exemple, vous ne pouvez pas copier des objets d'un bucket situé dans la région Chine (Hangzhou) vers un bucket situé dans la région Chine (Qingdao).
Assurez-vous qu'aucune politique de conservation n'est configurée pour le bucket source ni pour le bucket de destination. Dans le cas contraire, le message d'erreur The object you specified is immutable. s'affiche.
Autorisations
Par défaut, un compte Alibaba Cloud dispose de toutes les autorisations. Les utilisateurs RAM ou les rôles RAM associés à un compte Alibaba Cloud ne disposent d'aucune autorisation par défaut. Le compte Alibaba Cloud ou l'administrateur du compte doit accorder les autorisations d'opération via des politiques RAM ou une Bucket Policy.
|
API |
Action |
Description |
|
CopyObject |
|
Copie des objets au sein d'un bucket ou entre des buckets situés dans la même région. |
|
|
||
|
|
Si vous spécifiez la version de l'objet source via versionId, cette autorisation est également requise. |
|
|
|
Si vous copiez les tags d'objet via x-oss-tagging, ces autorisations sont requises. |
|
|
|
||
|
|
Si vous spécifiez les tags d'une version spécifique de l'objet source via versionId, cette autorisation est également requise. |
|
|
|
Lors de la copie d'un objet, si les métadonnées de l'objet de destination contiennent X-Oss-Server-Side-Encryption: KMS, ces deux autorisations sont requises. |
|
|
|
Exemple de code
Voici un exemple de code pour copier des objets au sein du même 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();