Flask路线下载.xml文件导致404 Not Found

时间:2016-04-27 12:39:51

标签: python angularjs nginx flask debian

我在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>

但是当我点击按钮时,我收到以下错误:

enter image description here

奇怪的是:

  1. 当应用由本地Python计算机上的小Windows服务器供电时,会正确触发下载。
  2. 我有一个route用于下载实际有效的.xlsx个文件,并且都在本地Windows计算机和Jessie VPS上。
  3. 有人看到我如何定义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文件并正常运行。

1 个答案:

答案 0 :(得分:0)

您还记得在服务器上重新加载应用吗?如果我在开发计算机和Web服务器上得到不同的结果,那通常就是问题。

例如,如果您使用gunicorn部署,则必须重新启动gunicorn,以便服务器知道您的代码所做的更改。