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 |
|
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. |
|
|
|
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é.
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.
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.
|
|
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 :
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 :
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 :
|
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: 0Exemple de réponse
x-oss-hash-crc64ecmaindique 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-objectExemple de réponse
Dans cet exemple,
x-oss-copy-source-version-idcorrespond à l'ID de version de l'objet source, qui est dans ce cas la version actuelle.x-oss-version-idcorrespond à 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-idcorrespond à l'ID de version de l'objet source, qui est la version spécifiée dans l'en-tête de requêtex-oss-copy-source.x-oss-version-idcorrespond à 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 :
|
|
Not Modified |
304 |
Cette erreur est renvoyée pour l'une des raisons suivantes :
|
|
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 :
|
|
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).