使用 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>
標籤,第二個是作為段落標籤的 <p>
標籤。在這個標籤中,我們將使用 anchor 標籤,並且 href
屬性將等於 url_for
屬性,並將其名稱傳遞給它。
<h2>Downloqad this file</h2>
<p> <a href="{{url_for('Download_File')}}">Download</a></p>
如果我們執行這個應用程式並開啟 localhost 5000
,它會告訴我們它無法為端點 Download_File
構建 URL。
這個語法 url_for('Download_File')
正在尋找一個下載檔案,所以我們只需要發出一個 get 請求就可以了。
現在我們將建立另一個路由,/download
。我們將建立一個與我們在 url_for()
屬性中指定的名稱相同的函式。
現在我們需要指定檔案的路徑,因此我們將建立一個變數,將其命名為 PATH
,並將路徑儲存在該變數中。
我們將使用 send_file()
函式返回檔案,該函式有兩個引數。第一個是路徑,第二個是 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