Python 使用flask将文件上载到AmazonS3
这是处理上载请求的代码:Python 使用flask将文件上载到AmazonS3,python,file-upload,amazon-s3,flask,Python,File Upload,Amazon S3,Flask,这是处理上载请求的代码: @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.ACCES
@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())
那么,将文件上传到amazon s3的正确方法是什么呢?请在下面的代码行中:
k.set_contents_from_string(data_file.readlines())
您正在向Amazon发送字符串列表(以换行符结尾!),而不是文件内容
您需要传递一个包含文件内容的str
对象:
set_contents_from_string(data_file.read())
下面介绍如何使用HTML文件输入标记、Python、Flask和Boto将多个文件上载到AmazonS3
这项工作的主要关键是Flask的request.files.getlist
和Boto的设置字符串中的内容
一些提示:
- 请确保设置S3 bucket权限和IAM用户权限,否则上载将失败。详情见自述文件
- 不要忘记在HTML表单标记中包含enctype=“multipart/form data”
- 不要忘记在HTML输入标记中包含属性multiple
- 不要忘记将AWS用户的凭据存储在环境变量中,如自述文件所示。确保这些环境变量在运行Python的会话中可用
您能将您得到的错误包括在内吗?顺便说一句,尝试使用从字符串(data\u file.read())设置内容。
。这就像一个魔咒!谢谢我把它写在一个答案里,你能接受吗?谢谢。我遇到了完全相同的问题,但是根据您的建议,我遇到了一个错误:'FileField'对象没有属性'read'
@haye321什么是FileField
?你在用什么?什么框架?德扬戈?烧瓶+表格?您是否使用enctype=“multipart/form data”
发布表单?