我试图更准确地了解Http连接如何与Flask一起工作,所以我尝试编写一个非常简单的应用程序以及另一个与request和requests-toolbelt的简单连接:
app = Flask('file-streamer')
@app.route("/uploadDumb", methods=["POST"])
def upload_dumb():
print("Hello")
return Response(status=200)
因此,基本上,该服务器应该只接收请求并返回响应。
然后,我实现了一段简单的代码,该代码使用toolbelt发送请求:
import requests
from requests_toolbelt.multipart import encoder
values = {"file": ("test.zip", open("test.zip", "rb"), "application/zip"), "test": "hello"}
m = encoder.MultipartEncoder(fields=values)
r = requests.post(url="http://localhost:5000/uploadDumb", data=m, headers={"Content-Type": m.content_type})
我要发送的文件是一个很大的文件,我想通过流媒体上传。 问题是,我希望Flask服务器等待整个文件发送出去(即使文件无用),然后返回响应,但这不是正在发生的事情。 实际上,Flask在发送过程的开始就响应,返回200响应,这导致“请求”端以“ BrokenPipeError”结束。
有人可以向我解释那里发生了什么吗?