2013-01-14 16 views
33

Jest to kod pracuję zBoto - przesyłanie plików do określonej lokalizacji na Amazon S3

import sys 
import boto 
import boto.s3 

# AWS ACCESS DETAILS 
AWS_ACCESS_KEY_ID = '' 
AWS_SECRET_ACCESS_KEY = '' 

bucket_name = AWS_ACCESS_KEY_ID.lower() + '-mah-bucket' conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
bucket = conn.create_bucket(bucket_name, location=boto.s3.connection.Location.DEFAULT) 
uploadfile = sys.argv[1] 

print 'Uploading %s to Amazon S3 bucket %s' % \ 
     (uploadfile, bucket_name) 

def percent_cb(complete, total): 
    sys.stdout.write('.') 
    sys.stdout.flush() 

from boto.s3.key import Key 
k = Key(bucket) 
k.key = 'my test file' 
k.set_contents_from_filename(testfile, cb=percent_cb, num_cb=10) 

Na moim S3 Stworzyłem „katalogów”, jak to „Bucket/images/wakacje”. Wiem, że to tylko wirtualne katalogi.

Moje pytanie brzmi, w jaki sposób mogę zmodyfikować to przesyłanie specjalnie do katalogu wirtualnego bucket/images/holiday na S3 zamiast do katalogu głównego?

Odpowiedz

51

Wszystko, co powinieneś zrobić, to przesłać ścieżkę katalogu wirtualnego do nazwy klucza przed przesłaniem. Na przykład:

key_name = 'my test file' 
path = 'images/holiday' 
full_key_name = os.path.join(path, key_name) 
k = bucket.new_key(full_key_name) 
k.set_contents_from_filename(...) 

Być może będziesz musiał zmienić to trochę dla swojej aplikacji, ale mam nadzieję, że daje ci to podstawowy pomysł.

+0

Och, to wielkie dzięki. – Jimmy

+0

Jimmy, możesz wkleić kod do przesłanego pliku, który działał. Nie widzę, żebyś użył zmiennej "uploadfile" gdziekolwiek w poniższym kodzie – Murphy

+0

Działa to również z ** multipart uploads ** '' 'mp = self._bucket.initiate_multipart_upload (bucket_key)' '' –

2

Można również użyć tego:

from boto.s3.key import Key 

bucket = conn.get_bucket('images') 
k = Key(bucket) 
k.key = 'holiday/my_test_file.txt' 

Działa to w moim s3_percent_uploader

python.exe s3_percent_uploader.py test_upload.txt testbucket test/upload.txt 

po przesyłanym pliku będzie testbucket/test/upload.txt

Powiązane problemy