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下载已经坏了。
告诉我原因,谢谢。
答案 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)