我正在尝试使用Python boto3重命名S3存储桶中的文件,但我无法清楚地理解参数。有人可以帮我吗?
我的计划是将对象复制到一个新对象,然后删除实际对象。
我在这里找到了类似的问题,但我需要使用boto3进行解决方案。
我正在尝试使用Python boto3重命名S3存储桶中的文件,但我无法清楚地理解参数。有人可以帮我吗?
我的计划是将对象复制到一个新对象,然后删除实际对象。
我在这里找到了类似的问题,但我需要使用boto3进行解决方案。
我找到了另一个解决方案
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()
在S3中,无法重命名对象,因此您需要将其复制到新名称,然后删除旧对象:
client.copy_object(Bucket="BucketName", CopySource="BucketName/OriginalName", Key="NewName")
client.delete_object(Bucket="BucketName", Key="OriginalName")
CopySource
参数应包含 BucketName
和 KeyName
,因此 OriginalName
并不完全等同于对象键名。 - TreinCopySource
应该有以下结构: {'Bucket': 'string', 'Key': 'string', 'VersionId': 'string'}
。这是参考文档。http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.copy_object - user666client.copy_object()
比client.copy()
慢得多。这是因为后者使用多线程以分块的方式上传对象。 - Radu以下是更新的Boto3文档中针对copy()方法的示例,该方法也适用于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(字典)--源存储桶的名称,源对象的键名和可选的源对象版本ID。字典格式为:{'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}。请注意,VersionId键是可选的,可以省略。
client
而不是 s3
,因为在 boto3 v1.9.83 中 's3.ServiceResource' object has no attribute 'copy_object'
。看一下 @MikA 的答案,它使用资源来复制。 - Joe Haddad
CopySource='string' or {'Bucket': 'string', 'Key': 'string', 'VersionId': 'string'}
。更多信息请查看http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.copy_object。 - Kurtis