使用 Flask 下載檔案

Salman Mehmood 2022年7月18日
使用 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。

Flask 下載檔案輸出 1

這個語法 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)

如果我們儲存並重新整理頁面,我們會看到它被轉換為一個超連結,我們可以通過點選這個連結來下載檔案。

Flask 下載檔案輸出 2

完整的 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)
Salman Mehmood avatar Salman Mehmood avatar

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