Flask返回的文件太大,如何保证文件可以正常下载?
时间: 2024-03-06 08:48:43 浏览: 23
如果要返回一个大文件,可以使用Flask的`stream_with_context`函数将文件分块传输,这样可以保证文件可以正常下载。
以下是一个示例代码:
```python
import os
from flask import Flask, send_file, stream_with_context, request
app = Flask(__name__)
# 要下载的文件名
file_name = 'your_file'
@app.route('/download')
def download():
def generate():
with open(file_name, 'rb') as f:
while True:
data = f.read(1024*1024) # 每次读取1MB数据
if not data:
break
yield data
# 使用stream_with_context函数分块传输文件
return app.response_class(stream_with_context(generate()), as_attachment=True, attachment_filename=file_name)
if __name__ == '__main__':
app.run()
```
在这个示例中,我们定义了一个生成器函数`generate`,它每次读取1MB数据并返回。然后使用Flask的`response_class`和`stream_with_context`函数将生成器函数的数据分块传输给用户,这样可以避免一次性将整个文件读入内存导致内存溢出。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)