flask.send_file实现文件下载、文件传输和二进制流传输

简介: 在使用flask框架时,我们有时需要向前端传输文件。或者需要用户访问一个url时直接下载文件。这时可以使用flask.send_file()函数来实现相关的操作。

在使用flask框架时,我们有时需要向前端传输文件。或者需要用户访问一个url时直接下载文件。这时可以使用flask.send_file()函数来实现相关的操作。

flask.send_file函数常用参数描述

  • path_or_file:需要发送的文件路径或者二进制文件对象
  • mimetype:文件的MIME类型,如果没有设置,会尝试根据文件名进行检测
  • as_attachment:布尔类型(默认False),为True表示下载保存文件,为False表示前端显示
  • download_name:保存文件时附件的默认名称,默认为文件名

url直接下载文件

flask.send_file的简单实现如下:

from flask import Flask
from flask import send_file

app = Flask(__name__)

@app.route('/download')
def download_file():
    return send_file('test.json')

if __name__ == '__main__':
    app.run(debug=True)

test.png
可以看到,调用flask.send_file()函数返回前端后,前端并没有直接下载文件,而是根据文件的类型显示的文件的具体内容。flask.send_file()在不传递mimetype参数的情况下,会根据文件名自动尝试判断判断文件的MIME类型。当遇到不常见文档或前端无法正常显示或下载的文档,可以手动进行mimetype参数的配置,而不是自动获取。
如果需要前端访问url,自动下载,可以配置as_attachment参数为True,访问url后,就不会显示文件内容而是自动下载需要的附件。

from flask import Flask
from flask import send_file

app = Flask(__name__)

@app.route('/download')
def download_file():
    return send_file('test.json', as_attachment=True)

if __name__ == '__main__':
    app.run(debug=True)

flask.send_file文件传输

本地文件传输

如上面的flask.send_file的简单实现所示,后端设置当前需要传输的文件路径即可将内容传输到前端显示或下载。

二进制流传输

通过文件路径的传输方式可以直接进行文件的传输。但是,随着分布式和微服务的发展,我们的后端服务可能并未部署在一台机器上,或有时候我们并没有需要传输的本地文件。此时,就可以合理的通过二进制流传输来实现相关的需求。
对于本地并没有文件,需要远程获取文件的方式有两种实现方式:

  • 获取文件,保存到本地,然后本地在转发给前端(不推荐)
  • 获取文件的二进制流,将二进制流传输到前端显示(推荐)

在二进制流传输的时候,因为是通过的流传输,flask无法自动判断文件的具体类型和文件名等信息,所以需要自己手动设置mimetypedownload_name等参数信息。
获取二进制流的参考代码:

import io

from flask import Flask
from flask import send_file

app = Flask(__name__)

def get_binary_io():
    with open('test.json', 'r', encoding='UTF-8') as file:
        bytes_io = io.BytesIO(file.read().encode())
    return bytes_io

@app.route('/download')
def download_file():
    return send_file(get_binary_io(), mimetype='application/json')

if __name__ == '__main__': 
    app.run(debug=True)

为更方便演示,在示例中,通过读取本地文件转换为二进制流的方式进行演示,本质原理是一样的。

相关文章
|
JSON 前端开发 JavaScript
Python Flask 简明教程(12)--Flask获取Ajax传输的JSON数据
本文目录 1. 前言 2. 创建项目结构 3. 发起Ajax请求 4. 编写app.py 5. 接收JSON数据 6. 测试 7. 小结
2167 0
|
3月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
173 3
|
3月前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
190 2
|
3月前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
251 2
|
3月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
构建RESTful APIs:使用Python和Flask
51 1
|
3月前
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API
|
4月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第12天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。首先概述了API的重要性及RESTful API的基本概念,接着详细讲解了Flask框架的特性和安装方法。通过创建一个基本的Flask应用,定义了处理“图书”资源的GET、POST、PUT和DELETE方法的路由,展示了如何处理请求和响应,以及如何进行错误处理。最后,提供了运行和测试API的方法,总结了Flask在构建RESTful API方面的优势。
53 1
|
4月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第10天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web应用框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了代码示例。通过这些步骤,读者可以快速掌握使用Flask构建RESTful API的方法。
78 1
|
4月前
|
数据库 开发者 Python
使用Python和Flask构建Web应用
【10月更文挑战第2天】使用Python和Flask构建Web应用
46 2
|
4月前
|
API 数据库 开发者
Flask:Python的轻量级Web框架
Flask:Python的轻量级Web框架
80 2