通过 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 应用程序:
我正在 运行使用以下代码将服务器与 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 应用程序: