У меня установлено приложение Flask с Nginx и Gunicorn. Приложение имеет конечную точку, которая позволяет пользователям загружать указанный ZIP-файл. Многие из zip-файлов небольшие, но у меня есть один большой - около 2,4 ГБ - который демонстрирует непоследовательное поведение при загрузке. У меня не было проблем с загрузкой файлов меньшего размера (размером не более 500 МБ);проблемы возникают только при размере файла более 2 ГБ.
Мой первоначальный код:
@app.route('/zip')
def zip_download(name):
file_name = '{}.zip'.format(name)
zip_file = os.path.join(app.config['ZIP_PATH'], file_name)
if os.path.exists(zip_file):
return send_file(
zip_file,
as_attachment=True,
attachment_filename=file_name)
else:
# tell user file doesn't exist
С этой конечной точкой мне не удалось загрузить весь файл 2,4 ГБ.
- Использование Chrome в Windows: загрузка может составить ~ 1 ГБ, а затем перезапустить загрузку полностью. Этот цикл, казалось бы, повторяется в цикле.
- Использование Chrome в MacOS: такое же поведение.
Я немного изменил код, чтобы использовать вместо него метод send_from_directory
:
@app.route('/zip')
def zip_download(name):
file_name = '{}.zip'.format(name)
zip_file = os.path.join(app.config['ZIP_PATH'], file_name)
if os.path.exists(zip_file):
return send_from_directory(app.config['ZIP_PATH'],
file_name,
as_attachment=True,
mimetype='application/zip')
На этот раз поведение немного отличается - лучше - но не совсем правильно.
- Chrome в Windows: загрузка завершена через некоторое время, но zip-файл поврежден / поврежден, и я не могу открыть файлы (PDF-файлы) внутри.
- Chrome на MacOS: нет проблем. Загрузка работала и могла открывать файлы.
По сути, я пытаюсь определить, можно ли улучшить эти проблемы с помощью Flask (например, параметры конфигурации, относящиеся к загрузке) или мне следует изучить параметры в nginx / gunicorn.