Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

send_from_directory error

Q&A

Closed

解決したいこと

flaskのでWebアプリをつくっています。
ダウンロードボタンを押したらstaticフォルダにあるsubmission.csvファイルをダウンロードしたいのですがうまく実装できないです。。

該当するソースコード

app.py
app = Flask(__name__,static_folder="static")
@app.route("/download",methods=["get","post"])
def download():
    return send_from_directory(app.static_folder,"submission.csv")
show.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>test</title>
</head>
<body>
    <h1>推測に成功しました!</h1>
    <form action="/download">
        <input type="submit" value="ダウンロード">
    </form>
    <form action="/index">
        <input type="submit" value="戻る">
    </form>
</body>

自分で試したこと

ダウンロードボタンを押すとNotFoundになってしまいます。

フォルダの階層

FLASK/
┣app.py
┣templates/show.html
┣static/submission.csv
┣run.py

0

3Answer

ボタンを押すまえにbrowserにURLを入力してみてください
それでもNotFoundになったらrouteに問題があります

1Like

Comments

  1. @namekosiru

    Questioner

    routeに問題があるのはわかるんですけど、指定方法がうまくいかなくて困ってます..
from flask import Flask
from flask import send_from_directory

app = Flask(__name__, static_folder="static")

@app.route("/download", methods=["get","post"])
def hello_world():
    return send_from_directory(app.static_folder, "download.jpg")

xxxx.png

riku0425さんと同じソースで私はできました!
ソースを編集した後flaskを再起動しましたか?
githubのrepositoryを教えてくれたら確認してみます!

1Like

Comments

何が問題なのかわかりました

@app.route("/download/<path:filename>", methods=["get","post"])
def download(filename):
    print('app.static_folder -> ', app.static_folder)
    print('filename -> ', filename)
    return send_from_directory(app.static_folder, filename=filename)

ソースを上のソースに変えてください
staticディレクトリをapp内に入れてください

ex) flask_app/app/static/submission.csv

request URL
http://127.0.0.1:5000/download/submission.csv

x2.png

解決になったらLGTMお願い致します:)

1Like

Comments

  1. @namekosiru

    Questioner

    初歩的なミスで本当にすみません、、ありがとうございます!

Your answer might help someone💌