web-dev-qa-db-fra.com

Boto3 / S3: renommer un objet en utilisant copy_object

J'essaie de renommer un fichier dans mon compartiment s3 en utilisant python boto3, je ne pouvais pas bien comprendre les arguments. Quelqu'un peut-il m'aider ici?

Ce que je prévois est de copier un objet dans un nouvel objet, puis de supprimer l'objet réel.

J'ai trouvé des questions similaires ici, mais j'ai besoin d'une solution utilisant boto3.

47
MikA

J'ai trouvé une autre solution

s3 = boto3.resource('s3')
s3.Object('my_bucket','new_file_key').copy_from(CopySource='my_bucket/old_file_key')
s3.Object('my_bucket','old_file_key').delete()
70
MikA

Vous ne pouvez pas renommer les objets dans S3. Par conséquent, comme vous l'avez indiqué, vous devez le copier sous un nouveau nom, puis supprimer l'ancien:

client.copy_object(Bucket="BucketName", CopySource="BucketName/OriginalName", Key="NewName")
client.delete_object(Bucket="BucketName", Key="OriginalName")
42
Boto User

Voici des exemples de la documentation mise à jour de Boto3 pour la méthode copy () , qui fonctionne également avec copy_object () et qui semble être la syntaxe requise maintenant:

copy_source = {'Bucket': 'source__bucket', 'Key': 'my_folder/my_file'}
s3.copy_object(CopySource = copy_source, Bucket = 'dest_bucket', Key = 'new_folder/my_file')
s3.delete_object(Bucket = 'source_bucket', Key = 'my_folder/my_file')

Note de la documentation liée ci-dessus:

CopySource (dict) - Nom du compartiment source, nom de clé de l'objet source et ID de version facultatif de l'objet source. Le format du dictionnaire est le suivant: {'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}. Notez que la clé VersionId est facultative et peut être omise.

8
jpgard