Python 不一致。通过nginx/gunicorn从Flask应用程序下载zip

Python 不一致。通过nginx/gunicorn从Flask应用程序下载zip,python,nginx,flask,zip,gunicorn,Python,Nginx,Flask,Zip,Gunicorn,我有一个装有Nginx和Gunicorn的Flask应用程序。该应用程序有一个端点,允许用户下载指定的zip文件。很多zip文件都很小,但我有一个很大的,大约2.4GB,显示了不一致的下载行为。我在下载较小的文件(不超过500MB)时没有遇到任何问题;这些问题似乎只出现在2GB+文件大小周围 我最初的代码是: @app.route('/zip') def zip_下载(名称): 文件名='{}.zip'。格式(名称)     zip_file=os.path.join(app.config['

我有一个装有Nginx和Gunicorn的Flask应用程序。该应用程序有一个端点,允许用户下载指定的zip文件。很多zip文件都很小,但我有一个很大的,大约2.4GB,显示了不一致的下载行为。我在下载较小的文件(不超过500MB)时没有遇到任何问题;这些问题似乎只出现在2GB+文件大小周围

我最初的代码是:

@app.route('/zip')
def zip_下载(名称):
文件名='{}.zip'。格式(名称)
    
zip_file=os.path.join(app.config['zip_path'],文件名)
如果os.path.exists(zip\u文件):
返回发送文件(
zip_文件,
如附件=真,
附件(文件名=文件名)
其他:
#告诉用户文件不存在
使用此端点,我无法下载整个2.4GB文件

  • 在Windows上使用Chrome:下载将达到1GB,然后完全重新启动下载。这个循环似乎会在一个循环中重复
  • 在MacOS上使用Chrome:同样的行为
我继续略微编辑代码,改为使用
send\u from\u directory
方法:

@app.route('/zip')
def zip_下载(名称):
文件名='{}.zip'。格式(名称)
    
zip_file=os.path.join(app.config['zip_path'],文件名)
如果os.path.exists(zip\u文件):
从_目录返回send_(app.config['ZIP_PATH'],
文件名,
如附件=真,
mimetype='application/zip')
这次的行为略有不同——更好——但并不完全正确

  • Windows上的Chrome:下载在一段时间后完成,但zip已损坏,我无法打开其中的文件(PDF)
  • MacOS上的Chrome:没有问题。下载成功,可以打开文件

因此,从本质上讲,我试图确定这些问题是否可以通过Flask(例如,与下载相关的配置选项)得到改善,或者我是否应该探索nginx/gunicorn中的选项。

我最终只是使用nginx直接为.zip文件提供服务,下载问题得到了解决

我尝试的python解决方案都没有解决这个问题,而且我在网上读到的大部分内容都表明python/Flask是提供文件的次优解决方案

在我的应用程序可用的
站点
文件中,我制作了一个简单的
位置{}
来实现这一点:

location /download/url {
    alias /path/to/static/directory;
}