2013-01-14 31 views
33

Đây là mã Tôi đang làm việc từBoto - tập tin tải lên đến một vị trí cụ thể trên 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) 

On S3 của tôi, tôi đã tạo ra "danh bạ", như thế này "xô/images/kỳ nghỉ". Tôi biết đây chỉ là những thư mục ảo.

Câu hỏi của tôi là, làm thế nào tôi có thể sửa đổi việc tải lên này đặc biệt cho thư mục xô/hình ảnh/kỳ nghỉ ảo trên S3 chứ không phải là thư mục gốc của nhóm?

Trả lời

51

Tất cả những gì bạn phải làm là thêm đường dẫn thư mục ảo vào tên khóa trước khi tải lên. Ví dụ:

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(...) 

Bạn có thể phải thay đổi một chút cho ứng dụng của mình nhưng hy vọng cung cấp cho bạn ý tưởng cơ bản.

+0

Ồ, đó là tuyệt vời cảm ơn bạn. – Jimmy

+0

Jimmy bạn có thể dán mã để tải lên hoạt động không. Tôi không thấy bạn đã sử dụng biến "uploadfile" ở bất kỳ đâu trong mã bên dưới – Murphy

+0

Điều này cũng hoạt động với ** tải lên nhiều phần ** '' 'mp = self._bucket.initiate_multipart_upload (bucket_key)' '' –

2

Bạn cũng có thể sử dụng này:

from boto.s3.key import Key 

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

Nó hoạt động như thế này trong tập tin tải lên s3_percent_uploader

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

sau của tôi sẽ được ở testbucket/test/upload.txt

Các vấn đề liên quan