python - 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。
有人可以向我解释这里发生了什么吗?
解决方案
我想这是因为 Flask 正文解析是惰性的(实际上这是一件好事)。因此,当请求到来时,Flask 只会读取标头,直到以某种方式访问主体(通过 request.data、request.files、request.json() 等)。因此,要触发完整的正文(和文件)上传,请尝试访问请求正文以使 Flask 解析文件,例如:
_ = request.data