使用boto上传文件

时间:2013-09-23 06:05:32

标签: python 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)

如何使用boto?

将文件从本地服务器的当前目录上传到S3存储桶

更新: 我需要在调用set_contents_from_filename函数之前先声明上传文件的密钥(filename)。

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

2 个答案:

答案 0 :(得分:9)

send_fileset_contents_from_file都将File对象作为第一个参数。如果您想传递字符串,您应该看到set_contents_from_filename

答案 1 :(得分:-2)

您可以使用此实用程序脚本:https://github.com/TimelyToga/upload_s3

python upload_s3.py <filename> [key_to_upload_as]

这会将任何文件上传到您指定的s3存储桶。

虽然在上传时set_contents_from_file需要一个python File对象。