flask send_from_directory与send_file在传递文件的区别
时间: 2023-12-09 08:02:30 浏览: 182
在 Flask 中,`send_from_directory` 和 `send_file` 都用于向客户端文件,但有一些区别。
send_from_directory` 函数用于从指定目录中发送文件。它提供了方便的方式来发送静态文件,如图像、CSS、JavaScript 等。以下是一个示例代码:
```python
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/images/<path:filename>')
def get_image(filename):
# 从指定目录中发送文件
return send_from_directory('static/images', filename)
if __name__ == '__main__':
app.run()
```
在上面的示例中,当请求 `/images/filename.jpg` 时,`get_image` 函数会从 `static/images` 目录中发送名为 `filename.jpg` 的文件。
`send_file` 函数用于发送任意类型的文件。它可以发送动态生成的文件(如通过 Pandas 导出的 XLSX 文件),或者从任意路径中发送文件。以下是一个示例代码:
```python
from flask import Flask, send_file
import pandas as pd
app = Flask(__name__)
@app.route('/api/export')
def export_data():
# 生成文件或从文件路径中获取文件
# ...
# 发送文件
return send_file('path/to/file.xlsx', as_attachment=True)
if __name__ == '__main__':
app.run()
```
在上面的示例中,当请求 `/api/export` 时,`export_data` 函数会发送名为 `file.xlsx` 的文件。
总结来说,`send_from_directory` 适用于发送静态文件,而 `send_file` 则适用于发送各种类型的文件,包括动态生成的文件。根据你的需求选择合适的函数。
阅读全文