这是处理上传请求的代码:
@app.route('/upload', methods=['POST'])
def upload():
if request.method == 'POST':
test = request
data_file = request.files.get('file')
file_name = data_file.filename
conn = S3Connection(settings.ACCESS_KEY, settings.SECRET_KEY)
bucket = conn.get_bucket(settings.BUCKET_NAME)
k = Key(bucket)
k.key = 'file_test.jpg'
# k.set_contents_from_file(data_file)
k.set_contents_from_string(data_file.readlines())
# return jsonify(name=file_name)
return jsonify(name=file_name)
我尝试了3个选项:
k.set_contents_from_string(data_file.readlines())
k.set_contents_from_file(data_file)
k.set_contents_from_stream(data_file.readlines())
那么将文件上传到亚马逊s3的正确方法是什么?
答案 0 :(得分:5)
以下是使用HTML文件输入标记Python,Flask和Boto将多个文件上传到Amazon S3的fully-functioning example。
使这项工作的主要关键是Flask的request.files.getlist
和Boto的set_contents_from_string
。
一些提示:
答案 1 :(得分:4)
在以下代码中的代码中:
k.set_contents_from_string(data_file.readlines())
您正在向Amazon发送list
个字符串(以换行符终止!)而不是文件内容。
您需要传递一个包含文件内容的str
对象:
set_contents_from_string(data_file.read())