Загрузка данных большого размера на сервер Flask через request.stream из внешнего интерфейса - PullRequest
0 голосов
/ 30 августа 2018

Описание проблемы

В настоящее время у меня возникают проблемы с загрузкой больших файлов (размером до нескольких гигабайт) на мой флеш-сервер со страницы веб-интерфейса. Возможное решение, которое я нашел, - это загрузка через request.stream. Вот пример кода, который я нашел в [1] :

# Upload file as stream to a file.
@app.route("/upload", methods=["POST"])
def upload():
    with open("/tmp/output_file", "bw") as f:
        chunk_size = 4096
        while True:
            chunk = request.stream.read(chunk_size)
            if len(chunk) == 0:
                return
            f.write(chunk)

Код работает, когда я использую следующую команду curl:

curl -X POST -T 'sample.zip' 'http://localhost/upload'

но с этим не работает:

curl -X POST -F 'file=@sample.zip' 'http://localhost/upload'

Кроме того, я хотел бы загрузить файлы из веб-интерфейса, официальный учебник содержит следующий пример [2] :

<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form method=post enctype=multipart/form-data>
  <input type=file name=file>
  <input type=submit value=Upload>
</form>

Но я думаю (и проверял), что приведенный выше код не соответствует моим требованиям по загрузке файла большого размера через request.stream. Есть ли какие-либо предложения или какие-либо другие обходные пути? Заранее спасибо!

Ссылки

  1. Потоковая передача файлов Flask
  2. Flask - загрузка файлов
...