Загрузите файл с помощью boto

import boto conn = boto.connect_s3('', '') mybucket = conn.get_bucket('data_report_321') 

Я могу загрузить файл из ведра, используя следующий код.

 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) 

Но я не могу загрузить файл. Я получаю сообщение об ошибке: AttributeError: объект 'str' не имеет атрибута 'tell'

Функции send_file и set_contents работают должным образом.

 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) 

Как загрузить файл из текущего каталога локального сервера в ведро S3 с помощью boto?


Обновление: перед вызовом функции set_contents_from_filename мне нужно сначала объявить ключ (имя файла) загруженного файла.

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

Оба файла send_file и set_contents_from_file принимают объект File для первого аргумента. Если вы хотите передать строку, вы должны увидеть set_contents_from_filename .

Вы можете использовать этот служебный скрипт: https://github.com/TimelyToga/upload_s3

 python upload_s3.py <filename> [key_to_upload_as] 

Это загрузит любой файл в ведро s3, которое вы укажете.

Хотя при загрузке set_contents_from_file принимает объект File python.