2009-09-23 114 views

回答

2

S3允許按對象複製對象。 當您指定源對象的密鑰和存儲桶以及目標目標的密鑰和存儲桶時,CopyObject操作會創建一個對象的副本。 不確定boto是否具有緊湊的實現。

4

瀏覽boto的源代碼我發現Key對象有一個「複製」方法。感謝您關於CopyObject操作的建議。

+0

幫助對方法副本模塊boto.s3.key: '拷貝(個體,dst_bucket,dst_key,元數據=無,reduced_redundancy =假,preserve_acl =假,encrypt_key =假)的Boto'方法。 s3.key.Key實例 將此密鑰複製到另一個存儲桶。 – 2012-05-25 07:31:34

14

凡鬥是鬥目的地:

bucket.copy_key(new_key,source_bucket,source_key) 
+1

這實際上讀取密鑰並將其放入新存儲區 - 這不是您想要的。抱歉。 – 2010-03-10 16:05:19

+0

我不相信這是準確的。這是IMO的最佳答案。 'copy_key'方法在PUT請求中傳遞'x-amz-copy-source'頭,它告訴S3直接從區域複製到區域,而不需要下載到你的機器上。 – sergiopereira 2015-08-15 19:20:10

+0

這裏是他們的文檔:http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.copy_key – creimers 2016-03-25 00:45:04

2

雖然沒人問,我想這可能是相關的,以顯示如何使用simples3做到這一點:

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

我不知道是什麼博託在這裏做,但值得注意的是,權限(ACL)而不是被S3複製,如果沒有其他指定,它將被重置爲「私有」。要複製ACL,你必須首先要求它。

+0

我第二次評論這個權限(遇到一個bug後)'dest_bucket .copy_key(key.name,src_bucket_name,key.name,preserve_acl = True)' – nsof 2014-09-01 14:18:39

0

請注意,Key對象上的'copy'方法具有「preserve_acl」參數(默認爲False),該參數將將源ACL複製到目標對象。

9
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 
相關問題