Boto3/S3: Renaming an object using copy_object

后端 未结 3 1301
鱼传尺愫
鱼传尺愫 2020-12-12 23:35

I\'m trying to rename a file in my s3 bucket using python boto3, I couldn\'t clearly understand the arguments. can someone help me here?

What I\'m planing is to copy

相关标签:
3条回答
  • 2020-12-13 00:15

    I found another 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()
    
    0 讨论(0)
  • 2020-12-13 00:19

    Following examples from updated Boto3 documentation for the copy() method, which also works with copy_object() and appears to be the required syntax now:

    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 from documentation linked above:

    CopySource (dict) -- The name of the source bucket, key name of the source object, and optional version ID of the source object. The dictionary format is: {'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}. Note that the VersionId key is optional and may be omitted.

    0 讨论(0)
  • 2020-12-13 00:21

    You cannot rename objects in S3, so as you indicated, you need to copy it to a new name and then deleted the old one:

    client.copy_object(Bucket="BucketName", CopySource="BucketName/OriginalName", Key="NewName")
    client.delete_object(Bucket="BucketName", Key="OriginalName")
    
    0 讨论(0)
提交回复
热议问题