在 Flask 中提供靜態檔案
提供靜態檔案是 Web 開發中的常見任務。 Flask 提供了多種處理此問題的方法,包括使用內建靜態資料夾路由或 send_from_directory 函數。
內建靜態資料夾路由
Flask 自動建立一個/static/
from flask import url_for @app.route('/') def home(): return url_for('static', filename='css/style.css')
send_from_directory 函數
send_from_directory 函數可讓您從應用程式中的任何目錄提供檔案。它有兩個參數:基底目錄和請求的檔案路徑。它確保請求的路徑包含在基本目錄中,防止目錄遍歷攻擊。
from flask import send_from_directory @app.route('/reports/<path:path>') def send_report(path): return send_from_directory('reports', path)
注意:
不要將 send_file 或 send_static_file 與 user-提供的路徑,因為這可能會讓您面臨漏洞。相反,請使用 send_from_directory,它旨在安全地處理使用者提供的路徑。
提供記憶體中檔案
如果您需要提供在以下位置產生的檔案記憶體而不將其寫入磁碟,您可以使用BytesIO 建立記憶體中檔案對象並將其傳遞給send_file。您還需要指定檔案名稱、內容類型和其他屬性。
from io import BytesIO import zipfile @app.route('/download.zip') def download_zip(): buffer = BytesIO() zipfile.ZipFile(buffer, 'w').write('file.txt') buffer.seek(0) return send_file(buffer, mimetype='application/zip', as_attachment=True, attachment_filename='download.zip')
以上是如何在 Flask 應用程式中高效地提供靜態文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!