Tous les produits
Search
Centre de documentation

Object Storage Service:Copy an object (Harmony SDK)

Dernière mise à jour :Aug 18, 2026

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

oss:GetObject

Copie des objets au sein d'un bucket ou entre des buckets situés dans la même région.

oss:PutObject

oss:GetObjectVersion

Si vous spécifiez la version de l'objet source via versionId, cette autorisation est également requise.

oss:GetObjectTagging

Si vous copiez les tags d'objet via x-oss-tagging, ces autorisations sont requises.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Si vous spécifiez les tags d'une version spécifique de l'objet source via versionId, cette autorisation est également requise.

kms:GenerateDataKey

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.

kms:Decrypt

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();

Scénario courant

Copier des objets d'un bucket source vers un bucket de destination dans la même région

import Client, { RequestError } from '@aliyun/oss';

// Create an OSSClient instance.
const client = new Client({
  // Specify the AccessKey ID obtained from 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 from another bucket.
 * Use the copyObject method to copy an object from the source bucket to the destination bucket.
 */
const copyObjectFromOtherBucket = async () => {
  try {
    // Call the copyObject method to copy an object from another bucket.
    const res = await client.copyObject({
      bucket: 'targetBucket', // Name of the destination bucket. 
      key: 'targetKey',       // Name of the destination object.
      copySourceBucket: 'sourceBucket', // Name of the source bucket. 
      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 copyObjectFromOtherBucket function to copy the object from another bucket.
copyObjectFromOtherBucket();