在 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中文网其他相关文章!