我试图更精确地了解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。
有人可以向我解释这里发生了什么吗?
答案 0 :(得分:0)
我认为发生这种情况是因为Flask的身体分析很懒(实际上是一件好事)。因此,当请求到来时,Flask仅读取标头,直到以某种方式访问主体为止(通过request.data,request.files,request.json()等)。因此,要触发完整的正文(和文件)上传,请尝试访问请求正文以使Flask解析文件,例如:
_ = request.data