【发布时间】:2019-11-13 06:55:54
【问题描述】:
我有一个使用 Nginx 和 Gunicorn 部署的 Flask 应用程序。该应用程序有一个端点,可让用户下载指定的 zip 文件。许多 zip 文件都很小,但我有一个大的 - 大约 2.4GB - 显示出不一致的下载行为。我下载较小的文件(不大于 500MB)没有问题;这些问题似乎只出现在 2GB+ 文件大小附近。
我的初始代码是:
@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.4GB 文件。
- 在 Windows 上使用 Chrome:下载将达到 ~1GB,然后完全重新启动下载。这个循环似乎会循环重复。
- 在 MacOS 上使用 Chrome:同样的行为。
我继续稍微编辑代码以改用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')
这一次的行为略有不同 - 更好 - 但并不完全正确。
- Windows 上的 Chrome:下载在一段时间后完成,但 zip 已损坏/损坏,我无法打开其中的文件 (PDF)。
- MacOS 上的 Chrome:没问题。下载工作,可以打开文件。
所以本质上,我正在尝试确定这些问题是否可以通过 Flask(例如,与下载相关的配置选项)得到改善,或者我是否应该探索 nginx/gunicorn 中的选项。
【问题讨论】:
标签: python nginx flask zip gunicorn