2009-09-23 15 views

Odpowiedz

2

S3 umożliwia kopiowanie obiektów według obiektów. Operacja CopyObject tworzy kopię obiektu po określeniu klucza i segmentu źródłowego obiektu oraz klucza i segmentu docelowego miejsca docelowego. Nie jestem pewien, czy Boto ma kompaktową implementację.

4

Przeglądając kod źródłowy boto, stwierdziłem, że obiekt Key ma metodę "copy". Dziękujemy za sugestie dotyczące operacji CopyObject.

+0

Pomoc na metodzie egzemplarzu w module boto.s3.key: 'kopia (self, dst_bucket, dst_key metadane = None, reduced_redundancy = False, preserve_acl = False, encrypt_key = False)' metoda boto. s3.key.Key instance Skopiuj ten klucz do innego zasobnika. –

14

Gdzie jest wiadro wiadro docelowy:

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

To faktycznie odczytuje klucz i umieszcza go w nowym wiadrze - co nie jest tym, czego potrzebujesz. Przepraszam. –

+0

Nie wierzę, że to jest dokładne. To najlepsza odpowiedź IMO. Metoda 'copy_key' przekazuje nagłówek' x-amz-copy-source' w żądaniu PUT, które mówi S3, aby kopiował bezpośrednio z regionu do regionu, bez pobierania na twój komputer. – sergiopereira

+0

Oto ich dokumenty: http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.copy_key – creimers

2

Chociaż nikt nie zapytał, pomyślałem, że może to być istotne, aby pokazać jak to zrobić z simples3:

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

Nie jestem pewien, co Boto robi to tutaj, ale warto zauważyć, że uprawnienia (ACL) będą , a nie kopiowane przez S3, zostanie ono zresetowane na "prywatne", jeśli nic innego nie zostanie określone. Aby skopiować listę ACL, musisz najpierw o nią poprosić.

+0

I sekundę ten komentarz odnośnie uprawnień (po napotkaniu błędu) 'dest_bucket .copy_key (key.name, src_bucket_name, key.name, preserve_acl = True) ' – nsof

0

Należy zauważyć, że metoda "copy" obiektu Key ma parametr "preserve_acl" (domyślnie False), który skopiuje listę ACL źródła do obiektu docelowego.

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 
Powiązane problemy