Flask を使用してファイルをダウンロードする
この説明では、Flask の send_file
関数を使用して、ファイルを添付ファイルとしてダウンロードするためのダウンロード可能なリンクを作成する方法を学習します。
Flask の send_file
関数を使用して、添付ファイルとしてファイルをダウンロードする
Flask Framework では、ファイルダウンローダーを作成して、PDF、JPEG、MP3、またはその他のファイルなどのあらゆる種類のファイルをダウンロードできますが、ロジックは一定のままです。これで、テキストエディタに移動して、PNG ファイルが配置されているのと同じディレクトリ内に単純な app.py
ファイルを作成するだけで済みます。
次に、テンプレートフォルダーも作成する必要があります。この中に、index.html
ファイルを作成します。これで完了です。まず、Flask ライブラリをインポートする必要があります。
必要なライブラリと send_file
ライブラリのみが必要です。
from flask import Flask, render_template, send_file
app
変数を作成し、__name__
属性を使用して Flask アプリケーションを初期化する必要があります。ここで、メイン関数を初期化します。このブロック内で run
関数を呼び出して、debug
が True
に等しいことを渡すだけでよいので、変更を加えるたびにアプリケーションが再起動します。
app = Flask(__name__)
if __name__ == "__main__":
app.run(debug=True)
HTML ファイルをロードするためのルートと関数を作成する必要があります。このために、/
であるホームルートを作成し、このルートに到達すると、Main_Page()
となる関数を呼び出します。
この関数は render_template()
を返します。この中で、index.html
ファイルを渡します。これにより、index.html
ファイル内に保存されているテンプレートが読み込まれます。
@app.route("/")
def Main_Page():
return render_template("index.html")
次に、ダウンロードしたファイルを保持する基本的なテンプレートを作成します。
いくつかのタグを使用します。最初のタグは見出しを保持する <h2>
タグで、2 番目のタグは段落タグである <p>
タグです。このタグ内では、アンカータグを使用し、href
属性は url_for
であるプロパティと等しくなり、その名前を渡します。
<h2>Downloqad this file</h2>
<p> <a href="{{url_for('Download_File')}}">Download</a></p>
このアプリケーションを実行してローカルホスト 5000
を開くと、エンドポイント Download_File
の URL を作成できなかったことがわかります。
この構文 url_for('Download_File')
はダウンロードファイルを探しているので、これを行うには get リクエストを行うだけで済みます。
次に、別のルート/download
を作成します。そして、url_for()
プロパティ内で指定したのと同じ名前の関数を作成します。
次に、ファイルのパスを指定する必要があるため、PATH
となる変数を作成し、この変数内にパスを格納します。
send_file()
関数を使用してファイルを返します。この関数は 2つのパラメーターを取ります。最初はパスになり、2 番目は as_attachment
が True
に等しくなります。これは、ダウンロード可能なファイルを添付ファイルとして作成するためです。
@app.route("/download")
def Download_File():
PATH = "Flask-logo.png"
send_file(PATH, as_attachment=True)
ページを保存して更新すると、ハイパーリンクに変換されていることがわかります。このリンクをクリックすると、ファイルをダウンロードできます。
完全な Python コード:
from flask import Flask, render_template, send_file
app = Flask(__name__)
@app.route("/")
def Main_Page():
return render_template("index.html")
@app.route("/download")
def Download_File():
PATH = "Flask-logo.png"
return send_file(PATH, as_attachment=True)
if __name__ == "__main__":
app.run(debug=True)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn