Flask возвращает ответ, даже не проверяя файлы - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь более точно понять, как соединения Http работают с Flask, поэтому я попытался написать очень простое приложение и другое простое соединение с запросами:

app = Flask('file-streamer')

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

Затем я отправляю большой файл (1,5GB) к конечной точке с запросами:

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

Я ожидал, что Flask будет ожидать отправки всего файла, даже если файл бесполезен.Однако это не то, что происходит, вместо этого Flask очень быстро возвращает ответ 200, что вызывает ошибку BrokenPipeError с моим вторым сценарием.

Может кто-нибудь объяснить мне, что здесь происходит?

1 Ответ

0 голосов
/ 11 февраля 2019

Полагаю, это происходит из-за того, что синтаксический анализ Flask является ленивым (что на самом деле хорошо).Поэтому, когда приходит запрос, Flask читает заголовки только до тех пор, пока не будет получен доступ к телу (через request.data, request.files, request.json () и т. Д.).Поэтому для запуска загрузки всего тела (и файла) попробуйте получить доступ к телу запроса, чтобы Flask проанализировал файл, например:

_ = request.data
...