首页 文章

Boto3 / S3:使用copy_object重命名对象

提问于
浏览
38

我正在尝试使用python boto3在我的s3存储桶中重命名文件,我无法清楚地理解这些参数 . 有人可以帮我吗?

我正在计划的是将对象复制到新对象,然后删除实际对象 .

我在这里发现了类似的问题,但我需要使用boto3的解决方案 .

3 回答

  • 52

    我发现了另一个解决方

    s3 = boto3.resource('s3')
    s3.Object('my_bucket','my_file_new').copy_from(CopySource='my_bucket/my_file_old')
    s3.Object('my_bucket','my_file_old').delete()
    
  • 33

    您无法在S3中重命名对象,因此如您所示,您需要将其复制到新名称,然后删除旧名称:

    client.copy_object(Bucket="BucketName", CopySource="BucketName/OriginalName", Key="NewName")
    client.delete_object(Bucket="BucketName", Key="OriginalName")
    
  • 3

    以下是来自copy()方法的更新Boto3文档的示例,该文档也适用于copy_object()并且现在看起来是必需的语法:

    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')
    

    上面链接的文档中的注释:

    CopySource(dict) - 源存储桶的名称,源对象的密钥名称以及源对象的可选版本ID . 字典格式为:{'Bucket':'bucket','Key':'key','VersionId':'id'} . 请注意,VersionId键是可选的,可以省略 .

相关问题