2009-09-23 29 views

Trả lời

2

S3 cho phép đối tượng theo bản sao đối tượng. Thao tác CopyObject tạo bản sao của đối tượng khi bạn chỉ định khóa và nhóm của đối tượng nguồn và khóa và nhóm của đích đích. Không chắc chắn liệu boto có thực hiện nhỏ gọn hay không.

4

Duyệt qua mã nguồn của boto Tôi thấy rằng đối tượng Key có phương thức "sao chép". Cảm ơn bạn đã đề xuất về hoạt động CopyObject.

+0

Trợ giúp về phương pháp bản sao trong mô-đun boto.s3.key: 'bản sao (bản thân, dst_bucket, dst_key, siêu dữ liệu = None, reduced_redundancy = False, preserve_acl = False, encrypt_key = False) 'phương pháp boto. s3.key.Key instance Sao chép Khóa này vào một nhóm khác. –

14

đâu xô là xô đến:

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

Điều này thực sự đọc chìa khóa và đặt nó trong thùng mới - đó không phải là những gì bạn muốn. Lấy làm tiếc. –

+0

Tôi không tin điều này là chính xác. Đây là câu trả lời hay nhất IMO. Phương thức 'copy_key' chuyển tiêu đề' x-amz-copy-source' trong một yêu cầu PUT, cho phép S3 sao chép trực tiếp từ vùng này sang vùng khác, mà không cần tải xuống máy của bạn. – sergiopereira

+0

Đây là tài liệu của họ: http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.copy_key – creimers

2

Mặc dù không ai hỏi, tôi nghĩ rằng nó có thể liên quan đến hiển thị như thế nào để làm điều này với simples3:

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

Tôi không chắc chắn những gì Boto có ở đây, nhưng đáng chú ý là các quyền (ACL) sẽ không được sao chép bởi S3, nó sẽ được đặt lại thành "riêng tư" nếu không có gì khác được chỉ định. Để sao chép ACL, trước tiên bạn phải yêu cầu.

+0

Tôi thứ hai nhận xét này liên quan đến các quyền (sau khi gặp lỗi) 'dest_bucket .copy_key (key.name, src_bucket_name, key.name, preserve_acl = True) ' – nsof

0

Lưu ý rằng phương thức 'copy' trên đối tượng Key có tham số "preserve_acl" (False theo mặc định) sẽ sao chép ACL của nguồn vào đối tượng đích.

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 
Các vấn đề liên quan