Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用flask将文件上载到AmazonS3_Python_File Upload_Amazon S3_Flask - Fatal编程技术网

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”
发布表单?