現在Flaskを用いてローカルホストにて、テキストファイルをダウンロードする機能を実装しようとしています。
そこでFlaskのsend_file()を用いて保存したファイルをJavaScriptに送信しているのですが、chromeのデベロッパーツール内のコンソールにテキストファイルの内容が表示されるだけで、保存しますか?などのダイアログが表示されません。
htmlでdownload属性を用いてダウンロードさせようともしましたが、ダウンロードのurlがlocalhost5000から始まるurlになってしまい、ファイルが存在しませんとなってしまいます。
ディレクトリ構成は以下のようになっています。
. ├── app │ ├── __pycache__ │ │ └── app.cpython-36.pyc │ ├── app.py │ ├── event_data │ │ └── eventfile.txt │ ├── static │ │ ├── css │ │ ├── js │ │ └── lang │ └── templates │ └── index5.html └── run.py
今回の問題に対して関係のないファイルは省略しています。
サーバはクライアントから受け取ったデータをevent_data/eventfile.txtとして保存します。
このテキストファイルをローカルにダウンロードできるようにしたいのですが、flask側でどのような処理を行えばよいのでしょうか。デプロイしなければいけないのでしょうか。そもそも根本的に間違っているのでしょうか。
よろしくお願いいたします。
python
1 2@app.route("/index", methods=["post"]) 3def post(): 4 if request.headers['Content-Type'] != 'application/json': 5 print(request.headers['Content-Type']) 6 return jsonify(res='error'), 400 7 8 json_data = request.json 9 10 # 中身ソート 11 for i in json_data: 12 sort_dict(i) 13 14 with open('./app/event_data/eventfile.txt', 'w', encoding='utf-8') as f: 15 for dict_data in json_data: 16 print(*dict_data.values(), sep=',', file=f) 17 18 return send_file('./event_data/eventfile.txt', as_attachment=True, attachment_filename='eventfile.txt') 19 20
回答1件
あなたの回答
tips
プレビュー