flask send_file
Flask是一个使用Python编写的轻量级Web应用程序框架。它提供了用于构建Web应用程序的核心功能,同时也支持简单而灵活的方式扩展其功能。在Flask中,我们经常需要向用户发送文件,例如图片、文档、音频或视频等。send_file
是Flask中用于将文件发送给客户端的方法。
send_file方法
send_file
方法位于flask
模块中,可以通过以下代码导入:
from flask import Flask, send_file
send_file
方法的基本语法如下:
send_file(filename_or_fp, mimetype=None, as_attachment=False, attachment_filename=None, add_etags=True, cache_timeout=None, conditional=False, last_modified=None, max_age=None)
接下来,我们将详细介绍send_file
方法的参数及用法。
参数说明
filename_or_fp
:要发送的文件路径或文件对象。mimetype
:文件的MIME类型。如果未提供,将根据文件扩展名推断。as_attachment
:如果为True
,客户端将提示将文件保存为附件。attachment_filename
:如果提供,客户端将使用此文件名保存文件。add_etags
:如果为True
,将在响应头中添加ETag。cache_timeout
:缓存超时时间,以秒为单位。conditional
:如果为True
,将检查请求头中的条件。last_modified
:文件的最后修改时间。max_age
:Cache-Control: max-age
响应头的值。
用法示例
示例1:发送本地文件
首先,我们将创建一个Flask应用程序,并在应用程序的根目录下放置一个名为example.txt
的文本文件。然后添加以下代码:
from flask import Flask, send_file
app = Flask(__name__)
@app.route('/')
def send_example_file():
return send_file('example.txt')
在这个示例中,当用户访问根路径/
时,将发送名为example.txt
的文本文件。
示例2:指定MIME类型
@app.route('/image')
def send_image_file():
return send_file('example.jpg', mimetype='image/jpeg')
在这个示例中,我们指定了文件example.jpg
的MIME类型为image/jpeg
,因此客户端将知道这是一个JPEG图像文件。
示例3:下载附件
@app.route('/download')
def download_file():
return send_file('example.pdf', as_attachment=True, attachment_filename='report.pdf')
在这个示例中,当用户访问/download
路径时,将以附件形式下载名为example.pdf
的PDF文件,保存文件名为report.pdf
。
示例4:缓存和条件发送
@app.route('/cached')
def send_cached_file():
return send_file('example.png', cache_timeout=3600, conditional=True, last_modified=os.path.getmtime('example.png'))
在这个示例中,我们设置了缓存超时时间为3600秒,并在响应头中添加了ETag,以便在条件发送文件时检查文件是否已更改。
运行结果
使用以上示例代码,您可以在Flask应用程序中使用send_file
方法发送文件。您可以根据需要调整参数和文件路径,以适应您的特定用例。当用户访问相关路由时,文件将被发送给客户端,并根据您指定的配置执行相应的操作,如下载附件或缓存文件。Flask的send_file
方法提供了方便的方式来处理文件发送和下载的需求,使您的应用程序更加灵活和强大。