2017-05-27 76 views
0

URLを訪れるだけでファイルをダウンロードするFlaskサーバーで簡単なルートを作成しようとしています。ここに私のフラスコのコードは次のとおりです。私はlocalhost:5000/mxl/またはlocalhost:500/mxlを訪問したときにFlaskルーティング - 404エラー

APP_ROOT = os.path.dirname(os.path.abspath(__file__)) 
UPLOAD_FOLDER = os.path.join(APP_ROOT, 'static/') 

app = Flask(__name__, static_url_path=UPLOAD_FOLDER) 
Bootstrap(app) 
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 
app.debug = False 
app.secret_key = 'notverysecret' 

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    ... 
    return render_template('index.html', request="POST", pitches=pitches) 

@app.route('/mxl/') 
def mxl(): 
    return app.send_static_file(UPLOAD_FOLDER + 'piece.mxl') 

if __name__ == "__main__": 
    app.run() 

しかし、私は、「要求されたURLがサーバー上に見つかりませんでした取得手動でURLを入力した場合は、あなたのスペルをチェックして、再度お試しください。 "エラー。私のコマンドラインでは、私は参照してください:

127.0.0.1 - - [27/May/2017 02:27:00] "GET /mxl/ HTTP/1.1" 404 - 

どうしてですか?

私はapp.url_mapを実行すると、私は次のような出力が得られます。

Map([<Rule '/mxl/' (HEAD, OPTIONS, GET) -> mxl>, 
<Rule '/' (HEAD, POST, OPTIONS, GET) -> index>, 
<Rule '/home/myusername/guitartab/guitartab/static//bootstrap/<filename>' (HEAD, OPTIONS, GET) -> bootstrap.static>, 
<Rule '/home/myusername/guitartab/guitartab/static//<filename>' (HEAD, OPTIONS, GET) -> static>]) 
+0

を参照するとき、私はノーだファイルpiece.mxlをダウンロードしますフラスコの専門家。しかし、私はこのWebサイトhttp://code.runnable.com/UiIdhKohv5JQAAB6/how-to-download-a-file-generated-on-the-fly-in-flask-for-pythonのアプローチを試してみました。 。ユーザーがボタンをクリックすると、ユーザーが何かをダウンロードできるようにしたいと思っています。基本的には、ユーザがそれを可能にするためにmake_responseメソッドが必要です。別の有益なリンクhttps://matthewmoisen.com/blog/how-to-download-a-csv-file-in-flask/ – arnold

+0

'app.run()'の前に、以下のようにしてください: 'print(app.url_map ) 'を入力し、質問を編集して出力を含めます。 – SuperSaiyan

+0

このリンクのようにブラウザが自動的にファイルをダウンロードするようにします:https://api.flat.io/v2/scores/56ae21579a127715a02901a6/revisions/last/mxl – pk1914

答えて

1

事がフラスコは、アプリケーションのルートパスに「静的」フォルダにデフォルトパラメータstatic_folderを、持っていることです。そして、docを参照してsend_static_file(filename)を知ってください。

だけにコードを変更:

@app.route('/mxl/') 
def mxl(): 
    return app.send_static_file('piece.mxl') 

それとも、パスを含めたい場合はsend_from_directoryを使用します。

from flask import send_from_directory 
@app.route('/mxl/') 
def mxl(): 
    print("test") 
    #return app.send_static_file('piece.mxl')  
    return send_from_directory(UPLOAD_FOLDER,'piece.mxl') 

それはあなたがhttp://127.0.0.1:5000/mxl/

+0

ありがとう!ダウンロードしたファイル名を確認することは可能ですか?今はファイル拡張子なしの単なる "mxl"です。また、私はブラウザから "ドキュメントとして解釈されたリソースが、MIMEタイプapplication/octet-stream:http:// localhost:5000/mxl"で転送されました。何故ですか? – pk1914

+0

'send_from_directory(UPLOAD_FOLDER、 'piece.mxl'、as_attachment = True、attachment_filename = 'piece.mxl')で修正済み – pk1914

+0

@ pk1914 cool、cheers :) –

関連する問題