Tous les produits
Search
Centre de documentation

Object Storage Service:CopyObject

Dernière mise à jour :Aug 18, 2026

L'opération CopyObject permet de copier un objet entre des buckets situés dans la même région, qu'il s'agisse du même bucket ou de buckets différents.

Versioning

Par défaut, x-oss-copy-source copie la version actuelle d'un objet. Pour copier une version spécifique, incluez l'ID de version dans x-oss-copy-source. Si la version source spécifiée est un marqueur de suppression, OSS renvoie une erreur 404 indiquant que l'objet n'existe pas.

Pour restaurer une version antérieure d'un objet en tant que version actuelle, copiez-la dans le même bucket. OSS définit alors cette version antérieure comme version actuelle.

Si le versioning est activé pour le bucket de destination, OSS génère automatiquement un ID de version unique pour l'objet nouvellement copié. Cet ID de version est renvoyé dans l'en-tête de réponse x-oss-version-id. Si le versioning est désactivé ou suspendu pour le bucket de destination, OSS génère une version avec un ID de version nul pour le nouvel objet. Cette nouvelle version écrase toute version existante possédant un ID de version nul.

Limites

  • Limites de taille des objets

    • Si les buckets source et de destination sont identiques et que vous ne modifiez ni la méthode de chiffrement ni la classe de stockage de l'objet lors de l'opération de copie, l'objet peut dépasser 5 Go.

    • Si les buckets source et de destination sont différents et que vous ne modifiez ni la méthode de chiffrement ni la classe de stockage de l'objet lors de l'opération de copie, l'objet ne peut pas dépasser 5 Go.

    • Si vous modifiez la méthode de chiffrement ou la classe de stockage de l'objet lors de l'opération de copie, l'objet ne peut pas dépasser 1 Go. Pour les objets supérieurs à 1 Go, utilisez l'opération UploadPartCopy.

  • Autorisations

    Les opérations CopyObject et UploadPartCopy nécessitent toutes deux des autorisations de lecture sur l'objet source.

  • Si vous utilisez l'opération CopyObject dans un bucket où le versioning est désactivé et que les objets source et de destination sont identiques :

    • Si la méthode de chiffrement ou la classe de stockage n'est pas modifiée, OSS modifie uniquement les métadonnées de l'objet sans copier son contenu.

    • Si la méthode de chiffrement ou la classe de stockage est modifiée, OSS modifie les métadonnées et copie également le contenu de l'objet.

  • L'objet source est un lien symbolique

    Si vous utilisez l'opération CopyObject sur un lien symbolique, seul le lien symbolique est copié. Le contenu du fichier vers lequel pointe le lien symbolique n'est pas copié.

  • L'espace de noms hiérarchique est activé pour le bucket

    Si l'espace de noms hiérarchique est activé pour le bucket, vous ne pouvez pas copier de répertoires.

  • Prévention des conflits d'écrasement de fichiers

    Si vous activez l'option Prevent File Overwrite, vous ne pouvez pas utiliser CopyObject pour modifier la classe de stockage d'un fichier, par exemple pour passer de Standard à Archive Storage. Utilisez plutôt la conversion automatique du cycle de vie.

Permissions

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 stratégies 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

Facturation

  • Chaque appel à l'opération CopyObject compte comme une requête PUT pour le bucket de destination.

  • L'opération CopyObject augmente l'utilisation du stockage du bucket de destination.

  • La modification de la classe de stockage d'un objet à l'aide de l'opération CopyObject implique des écrasements de données. Par exemple, si un objet Infrequent Access (IA) est écrasé et que sa classe de stockage est modifiée en Standard dans les 10 jours suivant sa création, des frais sont facturés pour 20 jours de stockage IA, car la durée minimale de stockage n'a pas été respectée. Pour plus d'informations sur les frais de stockage, consultez les frais de stockage.

  • Lorsque vous appelez l'opération CopyObject, si l'objet source est un objet IA, des frais de récupération de données pour le stockage IA sont facturés. Si l'objet source est un objet Archive Storage qui n'a pas été restauré à l'aide de RestoreObject et que l'accès en temps réel aux objets Archive est activé pour le bucket, des frais de récupération de données pour l'accès en temps réel sont facturés. Ces frais sont imputés au compte propriétaire du bucket source. Pour plus d'informations sur la facturation, consultez les frais de traitement des données.

Syntaxe de la requête

PUT /DestObjectName HTTP/1.1
Host: DestBucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
x-oss-copy-source: /SourceBucketName/SourceObjectName

En-têtes de requête

Tous les en-têtes de requête pour une opération de copie commencent par x-oss-. Par conséquent, ajoutez tous ces en-têtes de requête à la chaîne de signature.

Name

Type

Required

Value

Description

x-oss-forbid-overwrite

String

No

true

Indique s'il faut écraser un objet de destination existant portant le même nom. Si le versioning est activé ou suspendu pour le bucket de destination, l'en-tête de requête x-oss-forbid-overwrite est ignoré. Cela signifie que l'écrasement d'un objet portant le même nom est autorisé.

  • Si x-oss-forbid-overwrite n'est pas spécifié ou si x-oss-forbid-overwrite est défini sur false, vous pouvez écraser un objet de destination portant le même nom.

  • Si vous définissez x-oss-forbid-overwrite sur true, un objet de destination existant portant le même nom n'est pas écrasé.

La définition de l'en-tête de requête x-oss-forbid-overwrite dégrade les performances de traitement QPS. Pour utiliser l'en-tête de requête x-oss-forbid-overwrite pour de nombreuses opérations (QPS > 1000), contactez le support technique afin d'éviter tout impact sur votre activité.

Valeur par défaut : false

x-oss-copy-source

String

Yes

/oss-example/oss.jpg

Spécifie l'adresse source pour l'opération de copie.

Valeur par défaut : aucune

x-oss-copy-source-if-match

String

No

5B3C1A2E053D763E1B002CC607C5****

L'opération de copie est effectuée et 200 OK est renvoyé uniquement si l'ETag de l'objet source correspond à l'ETag que vous fournissez.

Valeur par défaut : aucune

x-oss-copy-source-if-none-match

String

No

5B3C1A2E053D763E1B002CC607C5****

L'opération de copie est effectuée et 200 OK est renvoyé uniquement si l'ETag de l'objet source ne correspond pas à l'ETag que vous fournissez.

Valeur par défaut : aucune

x-oss-copy-source-if-unmodified-since

String

No

Mon, 11 May 2020 08:16:23 GMT

L'objet est copié et 200 OK est renvoyé uniquement si l'heure que vous spécifiez est identique ou postérieure à l'heure réelle de modification de l'objet.

Valeur par défaut : aucune

x-oss-copy-source-if-modified-since

String

No

Mon, 11 May 2020 08:16:23 GMT

L'objet est copié et 200 OK est renvoyé uniquement si l'heure que vous spécifiez est antérieure à l'heure réelle de modification de l'objet.

Valeur par défaut : aucune

x-oss-metadata-directive

String

No

COPY

Spécifie comment définir les métadonnées de l'objet de destination.

  • COPY (par défaut) : Copie les métadonnées de l'objet source vers l'objet de destination.

    OSS ne copie pas la propriété x-oss-server-side-encryption de l'objet source vers l'objet de destination. La méthode de chiffrement côté serveur pour l'objet de destination dépend du fait que x-oss-server-side-encryption soit spécifié ou non dans l'opération de copie.

  • REPLACE : Ignore les métadonnées de l'objet source et utilise les métadonnées spécifiées dans la requête.

Important

Si les objets source et de destination sont identiques et que le versioning n'est pas activé, les métadonnées de l'objet source sont ignorées, quelle que soit la valeur de x-oss-metadata-directive. L'objet de destination utilise les métadonnées spécifiées dans la requête.

x-oss-server-side-encryption

String

No

AES256

Spécifie l'algorithme de chiffrement côté serveur qu'OSS utilise pour créer l'objet de destination.

Valeurs valides : AES256 et KMS

Important

Vous ne pouvez pas spécifier x-oss-server-side-encryption lorsque vous copiez un objet de type lien symbolique.

Vous ne pouvez utiliser l'algorithme de chiffrement KMS qu'après avoir acheté une suite KMS. Sinon, OSS renvoie l'erreur KmsServiceNotEnabled.

  • Si x-oss-server-side-encryption n'est pas spécifié dans l'opération de copie, l'objet de destination n'est pas chiffré côté serveur, que l'objet source ait été chiffré ou non.

  • Si x-oss-server-side-encryption est spécifié dans l'opération de copie, l'objet de destination est chiffré côté serveur, que l'objet source ait été chiffré ou non. L'en-tête de réponse de l'opération de copie inclut x-oss-server-side-encryption, et sa valeur correspond à l'algorithme de chiffrement de l'objet de destination.

    Lors du téléchargement de l'objet de destination, l'en-tête de réponse inclut également x-oss-server-side-encryption, et sa valeur correspond à l'algorithme de chiffrement de l'objet.

x-oss-server-side-encryption-key-id

String

No

9468da86-3509-4f8d-a61e-6eab1eac****

Spécifie la clé principale cliente (CMK) gérée par KMS.

Ce paramètre n'est valide que lorsque x-oss-server-side-encryption est défini sur KMS.

x-oss-object-acl

String

No

private

Spécifie les autorisations d'accès de l'objet de destination lors de sa création dans OSS.

Valeurs valides :

  • default (par défaut) : L'objet hérite des autorisations du bucket.

  • private : L'objet est une ressource privée. Seul le propriétaire de l'objet et les utilisateurs autorisés disposent des autorisations de lecture et d'écriture sur l'objet. Les autres utilisateurs ne peuvent pas accéder à l'objet.

  • public-read : L'objet est une ressource en lecture publique. Seul le propriétaire de l'objet et les utilisateurs autorisés disposent des autorisations de lecture et d'écriture sur l'objet. Les autres utilisateurs disposent uniquement des autorisations de lecture. Utilisez cette autorisation avec prudence.

  • public-read-write : L'objet est une ressource en lecture-écriture publique. Tous les utilisateurs disposent des autorisations de lecture et d'écriture sur l'objet. Utilisez cette autorisation avec prudence.

Pour plus d'informations sur les autorisations d'accès, consultez la section ACL d'objet.

x-oss-storage-class

String

No

Standard

Spécifie la classe de stockage de l'objet.

Pour un bucket de n'importe quelle classe de stockage, si vous spécifiez cet en-tête lors du téléchargement d'un objet, l'objet téléchargé est stocké dans la classe de stockage spécifiée. Par exemple, si vous définissez x-oss-storage-class sur Standard lors du téléchargement d'un objet dans un bucket IA, l'objet est stocké en tant qu'objet Standard.

Valeurs valides :

  • Standard (par défaut) : Standard

  • IA : Infrequent Access

  • Archive : Archive Storage

  • ColdArchive : Cold Archive

  • DeepColdArchive : Deep Cold Archive

    Important

    Pour copier de nombreux fichiers, spécifier directement Deep Cold Archive comme classe de stockage pour les fichiers copiés entraîne des frais élevés pour les requêtes PUT. Nous vous recommandons d'utiliser une règle de cycle de vie pour faire transiter les fichiers vers la classe de stockage Deep Cold Archive afin de réduire les frais de requêtes PUT.

Pour plus d'informations sur les classes de stockage, consultez la section Classes de stockage.

x-oss-tagging

String

No

a:1

Spécifie les tags de l'objet. Vous pouvez spécifier plusieurs tags simultanément, par exemple TagA=A&TagB=B.

Remarque

La clé et la valeur doivent être encodées en URL. Si un élément ne contient pas de signe égal (=), la valeur est considérée comme une chaîne vide.

x-oss-tagging-directive

String

No

Copy

Spécifie comment définir les tags de l'objet de destination. Valeurs valides :

  • Copy (par défaut) : Copie les tags de l'objet source vers l'objet de destination.

  • Replace : Ignore les tags de l'objet source et utilise les tags spécifiés dans la requête.

Cette opération utilise également des en-têtes de requête courants, tels que Host et Date. Pour plus d'informations, consultez la section En-têtes de requête courants.

En-têtes de réponse

Cette opération utilise uniquement des en-têtes de réponse courants. Pour plus d'informations, consultez la section En-têtes de réponse courants.

Éléments de réponse

Name

Type

Example

Description

CopyObjectResult

Container

N/A

Conteneur pour les résultats de l'opération CopyObject.

Valeur par défaut : aucune

ETag

String

5B3C1A2E053D763E1B002CC607C5****

L'ETag de l'objet de destination.

Élément parent : CopyObjectResult

LastModified

String

Fri, 24 Feb 2012 07:18:48 GMT

L'heure de la dernière mise à jour de l'objet de destination.

Élément parent : CopyObjectResult

Exemples

  • Le versioning est désactivé

    Exemple de requête

    PUT /test%2FAK.txt HTTP/1.1
    Host: tesx.oss-cn-zhangjiakou.aliyuncs.com
    Accept-Encoding: identity
    User-Agent: aliyun-sdk-python/2.6.0(Windows/7/AMD64;3.7.0)
    Accept: text/html
    Connection: keep-alive
    x-oss-copy-source: /test/AK.txt
    date: Fri, 28 Dec 2018 09:41:55 GMT
    authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
    Content-Length: 0

    Exemple de réponse

    x-oss-hash-crc64ecma indique la valeur CRC 64 bits de l'objet. Cette valeur CRC 64 bits est calculée selon la norme CRC-64/XZ. L'opération CopyObject ne garantit pas que l'objet généré possède une valeur CRC 64 bits.

    HTTP/1.1 200 OK
    Server: AliyunOSS
    Date: Fri, 28 Dec 2018 09:41:56 GMT
    Content-Type: application/xml
    Content-Length: 184
    Connection: keep-alive
    x-oss-request-id: 5C25EFE4462CE00EC6D87156
    ETag: "F2064A169EE92E9775EE5324D0B1****"
    x-oss-hash-crc64ecma: 12753002859196105360
    x-oss-server-time: 150
    <?xml version="1.0" encoding="UTF-8"?>
    <CopyObjectResult>
      <ETag>"F2064A169EE92E9775EE5324D0B1****"</ETag>
      <LastModified>2018-12-28T09:41:56.000Z</LastModified>
    </CopyObjectResult>
  • Copier un objet sans spécifier d'ID de version

    Exemple de requête

    PUT /dest-object-example HTTP/1.1
    Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com
    Date: Tue, 09 Apr 2019 03:45:32 GMT
    Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
    x-oss-copy-source: /versioning-copy-source/source-object

    Exemple de réponse

    Dans cet exemple, x-oss-copy-source-version-id correspond à l'ID de version de l'objet source, qui est dans ce cas la version actuelle. x-oss-version-id correspond à l'ID de version de l'objet nouvellement copié.

    HTTP/1.1 200 OK
    x-oss-copy-source-version-id: CAEQNRiBgIC28uaA0BYiIDY5OGIwNmNlNjYyMTRjNTc4N2M2OGNiMjZkZTQ2****
    x-oss-version-id: CAEQNxiBgIDG8uaA0BYiIGZhZDRkZTk5Zjg3YzRhNzdiMWEwZGViNDM1NTFh****
    x-oss-request-id: 5CAC155CB7AEADE01700****
    Content-Type: application/xml
    Content-Length: 184
    Connection: keep-alive
    Date: Tue, 09 Apr 2019 03:45:32 GMT
    Server: AliyunOSS
    <?xml version="1.0" encoding="UTF-8"?>
    <CopyObjectResult>
      <ETag>"C81E728D9D4C2F636F067F89CC14****"</ETag>
      <LastModified>2019-04-09T03:45:32.000Z</LastModified>
    </CopyObjectResult>
  • Copier un objet en spécifiant un ID de version

    Exemple de requête

    PUT /dest-object-example HTTP/1.1
    Host: versioning-copy.oss-cn-hangzhou.aliyuncs.com
    Date: Tue, 09 Apr 2019 03:45:32 GMT
    Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
    x-oss-copy-source: /versioning-copy-source/source-object?versionId=CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy****

    Exemple de réponse

    Dans cet exemple, x-oss-copy-source-version-id correspond à l'ID de version de l'objet source, qui est la version spécifiée dans l'en-tête de requête x-oss-copy-source. x-oss-version-id correspond à l'ID de version de l'objet nouvellement copié.

    HTTP/1.1 200 OK
    x-oss-copy-source-version-id: CAEQNRiBgICv8uaA0BYiIDliZDc3MTc1NjE5MjRkMDI4ZGU4MTZkYjY1ZDgy****
    x-oss-version-id: CAEQNxiBgMDP8uaA0BYiIDIyNGNhZDQ1M2M3NzRkZThiNzE0N2I3ZDkxOWY4****
    x-oss-request-id: 5CAC155CB7AEADE01700****
    Content-Type: application/xml
    Content-Length: 184
    Connection: keep-alive
    Date: Tue, 09 Apr 2019 03:45:32 GMT
    Server: AliyunOSS
    <?xml version="1.0" encoding="UTF-8"?>
    <CopyObjectResult>
      <ETag>"C4CA4238A0B923820DCC509A6F75****"</ETag>
      <LastModified>2019-04-09T03:45:32.000Z</LastModified>
    </CopyObjectResult>

SDK

Utilisez les kits de développement logiciel (SDK) pour les langages suivants afin d'appeler cette opération.

Outil de ligne de commande ossutil

Pour la commande ossutil correspondant à l'opération CopyObject, consultez la section copy-object.

Codes d'erreur

Error code

HTTP status code

Description

InvalidArgument

400

La valeur d'un paramètre, tel que x-oss-storage-class, n'est pas valide.

Precondition Failed

412

Cette erreur est renvoyée pour l'une des raisons suivantes :

  • L'en-tête de requête x-oss-copy-source-if-match est spécifié, mais l'ETag de l'objet source ne correspond pas à l'ETag que vous avez fourni.

  • L'en-tête de requête x-oss-copy-source-if-unmodified-since est spécifié, mais l'heure que vous avez spécifiée est antérieure à l'heure réelle de modification de l'objet.

Not Modified

304

Cette erreur est renvoyée pour l'une des raisons suivantes :

  • L'en-tête de requête x-oss-copy-source-if-none-match est spécifié, mais l'ETag de l'objet source correspond à l'ETag que vous avez fourni.

  • L'en-tête de requête x-oss-copy-source-if-modified-since est spécifié, mais l'objet source n'a pas été modifié depuis l'heure que vous avez spécifiée.

KmsServiceNotEnabled

403

Vous avez défini x-oss-server-side-encryption sur KMS, mais vous n'avez pas acheté de suite KMS.

FileAlreadyExists

409

Cette erreur est renvoyée pour l'une des raisons suivantes :

  • L'en-tête de requête inclut x-oss-forbid-overwrite=true pour empêcher l'écrasement d'un objet portant le même nom, mais un objet portant le même nom existe déjà dans le bucket.

  • La fonctionnalité d'espace de noms hiérarchique est activée pour le bucket et vous tentez de copier un objet dont la source ou la destination est un répertoire.

FileImmutable

409

Cette erreur est renvoyée si vous tentez de supprimer ou de modifier des données dans un bucket se trouvant dans un état protégé.

FAQ

CopyObject prend-il en charge la copie par lot de fichiers ?

Non. L'opération CopyObject sert à copier un seul fichier. Pour copier plusieurs fichiers par lot, utilisez ossutil. Pour plus d'informations, consultez la section cp (copier des fichiers).