首页 > 解决方案 > Flask 甚至不检查文件就返回响应

问题描述

我试图更准确地理解 Http 连接如何与 Flask 一起工作,所以我尝试编写一个非常简单的应用程序和另一个简单的请求连接:

app = Flask('file-streamer')

@app.route("/uploadDumb", methods=["POST"])
def upload_dumb():
    print("Hello")
    return Response(status=200)

然后我通过请求向端点发送一个大文件(1.5 GB):

url = "http://localhost:5000/uploadDumb"
values = {"file": open(file, "rb")}
r = requests.post(url=url, data={}, files=values)

我希望 Flask 等待整个文件被发送,即使该文件是无用的。但是,这不是正在发生的事情,而是 Flask 非常快地返回 200 响应,这会导致我的第二个脚本出现 BrokenPipeError。

有人可以向我解释这里发生了什么吗?

标签: pythonflaskpython-requests

解决方案


我想这是因为 Flask 正文解析是惰性的(实际上这是一件好事)。因此,当请求到来时,Flask 只会读取标头,直到以某种方式访问​​主体(通过 request.data、request.files、request.json() 等)。因此,要触发完整的正文(和文件)上传,请尝试访问请求正文以使 Flask 解析文件,例如:

_ = request.data

推荐阅读