我在flask
上运行Debian Jessie VPS
(0.10.1)应用,并由nginx
(1.6.2)提供支持。该应用程序运行正常,但我最近添加的特定route
存在问题。
route
用于下载.xml
个文件。
告诉目录和文件名是动态的:
@app.route('/backups/<dir_key>/<filename>')
它根据flask
send_from_directory
函数注册一个函数:
def backups(dir_key,filename):
directory = os.path.join(app.config['BACKUPXML_FOLDER'], dir_key)
return send_from_directory(directory, filename, as_attachment=True)
由于flask
url_for
函数生成了路由,并返回到前端:
return jsonify({
'backupFileUrl': url_for('backups', dir_key=dir_key, filename = filename, _external=True)
})
它存储在AngularJS
变量中:
$scope.backupFileUrl = response.backupFileUrl;
最后包含在<a>
标记中供下载:
<a class="btn btn-primary"
ng-show="sessionDownload"
ng-href="{{ backupFileUrl }}" target="_blank">
<span class="glyphicon glyphicon-save"></span> Télécharger </a>
但是当我点击按钮时,我收到以下错误:
奇怪的是:
Python
计算机上的小Windows
服务器供电时,会正确触发下载。route
用于下载实际有效的.xlsx
个文件,并且都在本地Windows
计算机和Jessie VPS
上。有人看到我如何定义route
以使其有效?
如果需要,这是api架构:
api / app.py
import sys
sys.path.append('../')
from flask_script import Server, Manager
from kosapp import app, db
manager = Manager(app)
if __name__ == '__main__':
manager.run()
API / config.py
from os.path import abspath, dirname, join
import tempfile
basedir = dirname(abspath(__file__))
BASEDIR = dirname(abspath(__file__))
DEBUG = True
REPORTS_FOLDER = '/tmp/reports'
# on local machine
# REPORTS_FOLDER = os.path.join(tempfile.gettempdir(), 'reports')
BACKUPXML_FOLDER = '/tmp/backups'
# on local machine
# BACKUPXML_FOLDER = os.path.join(tempfile.gettempdir(), 'backups')
api / kosapp / __ init __。py
from flask import Flask
app = Flask(__name__)
app.url_map.strict_slashes = False
app.config.from_object('config')
from kosapp import views
API / kosapp / views.py
import os
from flask import send_file, jsonify, request, render_template, send_from_directory
from kosapp import app
@app.route('/reports/<dir_key>/<filename>')
def reports(dir_key, filename):
directory = os.path.join(app.config['REPORTS_FOLDER'], dir_key)
return send_from_directory(directory, filename)
@app.route('/backups/<dir_key>/<filename>')
def backups(dir_key,filename):
directory = os.path.join(app.config['BACKUPXML_FOLDER'], dir_key)
return send_from_directory(directory, filename, as_attachment=True)
作为备注,路由'/reports/<dir_key>/<filename>'
旨在下载.xlsx
文件并正常运行。
答案 0 :(得分:0)
您还记得在服务器上重新加载应用吗?如果我在开发计算机和Web服务器上得到不同的结果,那通常就是问题。
例如,如果您使用gunicorn
部署,则必须重新启动gunicorn
,以便服务器知道您的代码所做的更改。