2013-09-23 48 views
6
import boto 
conn = boto.connect_s3('', '') 

mybucket = conn.get_bucket('data_report_321') 

Tôi có thể tải xuống tệp từ một nhóm bằng cách sử dụng mã sau đây.Tải lên tệp bằng boto

for b in mybucket: 
    print b.name 
    b.get_contents_to_filename('0000_part_00', headers=None, cb=None, num_cb=10, torrent=False, version_id=None, res_download_handler=None, response_headers=None) 

Nhưng tôi không thể tải lên một tệp. Tôi gặp lỗi: Thuộc tínhError: đối tượng 'str' không có thuộc tính 'tell'

hàm send_file hoặc set_contents đang hoạt động như mong đợi.

for b in mybucket: 
    b.send_file('mytest.txt', headers=None, cb=None, num_cb=10, query_args=None, chunked_transfer=False, size=None) 
    b.set_contents_from_file('mytest.txt', headers=None, replace=True, cb=None, num_cb=10, policy=None, md5=None, reduced_redundancy=False, query_args=None, encrypt_key=False, size=None, rewind=False) 

Làm cách nào để tải tệp từ thư mục máy chủ cục bộ hiện tại lên S3 bằng boto?


Cập nhật: tôi cần phải khai báo chính (filename) của tập tin tải lên đầu tiên trước khi gọi hàm set_contents_from_filename.

k = boto.s3.key.Key(mybucket) 
k.key = 'uploaded_file.txt' 
k.set_contents_from_filename("myteswt.txt") 

Trả lời

9

Cả send_fileset_contents_from_file mất một đối tượng File cho số đầu tiên. Nếu bạn muốn chuyển một chuỗi, bạn sẽ thấy set_contents_from_filename.

+2

Tôi không nhận được bất kỳ lỗi nào với set_contents_from_filename nhưng tệp không thực sự được tải lên nhóm đó. Tui bỏ lỡ điều gì vậy? – shantanuo

-2

Bạn có thể sử dụng kịch bản tiện ích này: https://github.com/TimelyToga/upload_s3

python upload_s3.py <filename> [key_to_upload_as] 

Đó sẽ tải lên bất kỳ tập tin vào một xô s3 mà bạn chỉ định.

Mặc dù, khi bạn đang tải lên set_contents_from_file hãy lấy đối tượng python File.