通过 curl 将文件发送到 flask,flask 在 request.files 中显示没有 FileStorage 对象

Sending a file via curl to flask, flask shows no FileStorage objects in request.files

我正在 运行使用以下代码将服务器与 Flask 连接起来:

from flask import Flask, flash, request, redirect, url_for
app = Flask(__name__)

@app.route('/', methods=['POST'])
def upload_file():
    # check if the post request has the file part
    print(request.files.__dict__)
    print(request.form.__dict__)
    print(request.data)
    return ""

app.run(host='0.0.0.0', port=5000);

我 运行 它使用命令“python server2.py”,其中 server2.py 是上面的服务器代码。我在安装了 Flask 的虚拟环境中。

在同一台机器上的单独 shell 中,在命令行中,我 运行:

curl -F onlyFile=@test.dat  http://192.168.1.25:5000

我希望在第一个打印语句中看到一些内容并打印出来,request.files.__dict__

相反,我看到了这个输出:

 * Serving Flask app 'server2' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://192.168.1.25:5000/ (Press CTRL+C to quit)
{}
{}
b''
192.168.1.25 - - [09/Sep/2021 18:58:41] "POST / HTTP/1.1" 200 -

这告诉我 curl 与我的服务器通信,服务器接受了通信 (200),但是,服务器没有在 request.files.__dict__.

中放入任何内容

谁能帮我理解为什么这个简短的 Flask 程序没有按照我期望的方式与 curl 通信?

谢谢!

除您尝试读取数据的方式外,一切都按预期进行。

您需要访问数据,例如通过 request.files["onlyFile"].

request.files 不是标准的 Python 字典,而是 ImmutableMultiDict.

我怎么知道?我设置了一个断点并检查了请求的状态。

这并不难 - 我用 5 分钟的时间快速讲述了如何调试 Flask 应用程序:

https://www.youtube.com/watch?v=Fxkco-gS4S8