Flask + Nginx,但文件下载错误(文件大小:0kb)?

时间:2016-05-05 09:19:21

标签: javascript nginx flask

Flask + Nginx

我在js代码中使用window.open('/Download/test.xls'),我想下载文件test.xls

和我的代码是这样的:

@app.route('/Download/<filename>')
def download(filename):
response = make_response()

response.headers['Cache-Control'] = 'no-cache'
response.headers['Content-Type'] = 'application/vnd.ms-excel'
response.headers['Content-Description'] = 'File Transfer'
response.headers['Content-Disposition'] = 'attachment; filename=%s' % filename

return response
像这样的

和nginx.conf:

server {
    listen       80;
    server_name  tongji.yunzx.com;

server_name_in_redirect off;

proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

location / {
     proxy_pass http://127.0.0.1:5000/;
    }

location /Download/(.*) {
internal;
root /root/HostMonitor/;
    }
}

文件test.xls从web大小的下载量为0kb,无法打开它。为什么?

我使用像xftp这样的工具检查服务器中的test.xls是否正确,没有损坏。但是Chrome下载已经坏了。

告诉我原因,谢谢。

1 个答案:

答案 0 :(得分:0)

原因是你创建了一个响应对象并附加了一些标题,但是对附件文件没有任何作用,所以你得到一个空文件。

在烧瓶中,有一个名为send_from_directory的函数:

  

使用send_file()从给定目录发送文件。这是一种从上传文件夹或类似内容快速公开静态文件的安全方法。

所以你可以尝试:

@app.route('/Download/<path:filename>')
def download(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename, as_attachment=True)