如何使用Python(和boto)在Amazon S3中克隆密钥?

时间:2009-09-23 09:34:45

标签: python amazon-s3 boto

我的S3存储桶中的密钥中包含一个文件。我想创建一个新密钥,它将包含相同的文件。是否可以不下载该文件? 我正在寻找Python的解决方案(最好是boto库)。

6 个答案:

答案 0 :(得分:15)

其中bucket是目标存储区:

bucket.copy_key(new_key,source_bucket,source_key)

答案 1 :(得分:10)

from boto.s3.key import Key

#Get source key from bucket by name
source_key = source_bucket.get_key(source_key_name)

#Copy source key to a new bucket with a new key name (can be the same as source)
#Note: source_key is Key
source_key.copy(dest_bucket_name,dest_key_name)

#The signature of boto's Key class:
def copy(self, dst_bucket, dst_key, metadata=None,
             reduced_redundancy=False, preserve_acl=False,
             encrypt_key=False, validate_dst_bucket=True)

#set preserve_acl=True to copy the acl from the source key

答案 2 :(得分:4)

浏览boto的源代码我发现Key对象有一个“复制”方法。感谢您对CopyObject操作的建议。

答案 3 :(得分:2)

S3允许逐个对象复制。 当您指定源对象的密钥和存储桶以及目标目标的密钥和存储桶时,CopyObject操作会创建对象的副本。 不确定boto是否具有紧凑的实现。

答案 4 :(得分:2)

虽然没人问,但我认为用simples3来说明如何做到这一点可能是相关的:

>>> b.copy("my_bucket/file.txt", "file_copy.txt", acl="public")

我不确定Boto在这里做了什么,但值得注意的是,S3将复制权限(ACL),如果没有指定其他内容,它将被重置为“private” 。要复制ACL,您必须先要求它。

答案 5 :(得分:0)

请注意,Key对象上的'copy'方法有一个“preserve_acl”参数(默认为False),它将源的ACL复制到目标对象。