【问题标题】:Can't upload any file from html to flask [duplicate]无法将任何文件从 html 上传到烧瓶 [重复]
【发布时间】:2017-06-09 06:19:26
【问题描述】:

我创建了这个 html:

<!DOCTYPE html>
<html lang="en" xmlns:https="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Upload Test</title>
</head>
<body>
    <form action="http://localhost:8887/upload/" method="post">
        <label class="btn btn-default btn-file">Browse
            <input type="file" class="hidden"/>
        </label>
        <br>
        <input class="btn btn-default" type="submit">
    </form>
</body>
</html>

所以我正在尝试将数据从前端上传到后端。在后端我使用这个代码:

from flask import Flask
from flask import request

app = Flask(__name__)


    @app.route('/upload/', methods=['POST', 'GET'])
    def upload():
        print(request.files)
        return 'hey'

    if __name__ == '__main__':
        app.run('0.0.0.0', 8887)

print(request.files) 行的结果总是

ImmutableMultiDict([])

我不明白我的错误在哪里?

【问题讨论】:

  • 上传文件不仅仅是一个常规请求。您是否查看过上传文件的文档? flask.pocoo.org/docs/0.12/patterns/fileuploads
  • @Craicerjack 是的,但有什么区别?如果我添加enctype=multipart/form-data,它无论如何都不会工作。
  • 将您的代码与文档中的代码进行比较,您会发现差异很大。还有一个用于文件上传的烧瓶插件 - pythonhosted.org/Flask-Uploads。除此之外,我看不出您认为是什么错误,文件上传不会打印出文件中的所有数据,因为它是文件而不是通常的数据。我认为它会打印出ImmutableMultiDict([]),因为这就是它的存储方式

标签: python flask


【解决方案1】:

我本身不是flask 开发人员,但正如@Craicerjack 已经说过的,您只需上传表单即可:

  1. 标签用enctype=multipart/form-data 标记,&lt;input type=file&gt; 放置在该表单中。
  2. 应用程序从请求对象的文件字典中访问文件。
  3. 使用文件的 save() 方法将文件永久保存在文件系统的某个位置。

multipart/form-data 有很大的不同,因为它明确表示:

  1. 请求中会有不同的 mime 类型。

  2. 您的表单数据不应被编码(如果内存服务于其他值是application/x-www-form-urlencodedtext/plain)。

为什么是multipar/form-data?所以客户端(也就是浏览器)发送一个看起来像这样的多部分请求

MIME-Version: 1.0
Content-Type: multipart/form-data;
boundary="----=_NextPart_000_0004_01D270B5.6F278C60"
my_post_variable = value
------=_NextPart_000_0004_01D270B5.6F278C60
Content-Type: octet-stream
3434352345345341223423

上传的文件在------=_NextPart_000_0004_01D270B5.6F278C60之后。

现在,在所有解释之后,您应该将 enctype=multipart/form-data 添加到您的表单中并从路由中删除 GET 方法,这样您的上传应该会继续进行。

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2019-08-20
    • 2021-07-03
    • 2021-06-08
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 2018-02-19
    相关资源
    最近更新 更多