如何利用python web框架做文件流下载的实现示例


Posted in Python onJune 02, 2020

hello 大家好, 前不久公司里有个需求,把时序数据库中的日志下载到本地. 大家都知道. 数据库里的数据 都是存在数据库里的(废话). 想把他下载到客户的本地. 有的同学第一反应是: 只有文件才能下载. 所以大多数同学会想到先把数据从数据库中读出来,然后写入到服务器中的某个文件夹下生成文件, 然后再下载. 其实这是非常不效率的方法, 最简单的方法是,我们从数据库中读取到文件后, 直接以流的形式让用户去下载.

这里我拿python flask框架来做例子,其实非常简单,步骤一共有3个

1: 取出数据, 我们默认为json文件吧

2: 在response中加入指定的header

3: 将数据返回.

那么废话少说,我们直接上代码:

# coding:utf-8
import json
 
from flask import Flask, make_response 
app = Flask(__name__)
 
@app.route('/download', methods=["GET"])
def download():user = {'name': 'dewei', 'age': 33} 
 data = json.dumps(user)
 response = make_response(data)
 response.headers['content-type'] = 'application/octet-stream;charset=utf-8'
 response.headers['content-disposition'] = 'attachment;filename=user.json'
 return response
 
if __name__ == '__main__':
 app.run(host='0.0.0.0', port=5005, debug=True)

这是一个非常简单的demo.

flask的定义我们不去关心了. 这里最重要的是获取response, 并且在response的headers中,加入content-type 定义为octet-stream 流的操作. 另外一个key是 content-disposition ,这里主要定义文件的名称. 这两部完成之后,我们只需要return response即可, 重点就在这两个header上,然后传入数据信息(这里我们定义了一个json,大家也可以定义其他文件,比如excel,当然 excel请大家查询一下对应的content-type. 还是非常简单的, 这个方法对于任何web框架都是用, 比如 我们常用的 django, tornado web.py 都是一样, 只不过语法在不同的框架里,方法名和用法可能有简单区别,但换汤不换药,原理是一样的.

最后说一下用法,一般来说 下载的链接都是 get 所以前端只需要定义个 a标签 添加 download属性即可, demo如下:

<a href="xxxx/download" rel="external nofollow" download>文件下载</a>

到此这篇关于如何利用python web框架做文件流下载的实现示例的文章就介绍到这了,更多相关python 文件流下载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
Python中的条件判断语句基础学习教程
Feb 07 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
Python_LDA实现方法详解
Oct 25 Python
Python内置模块logging用法实例分析
Feb 12 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
Apr 02 Python
基于Django与ajax之间的json传输方法
May 29 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 Python
使用python实现ftp的文件读写方法
Jul 02 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
Python实现滑雪小游戏
Sep 25 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 #Python
Java多线程实现四种方式原理详解
Jun 02 #Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 #Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 #Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 #Python
Python几种常见算法汇总
Jun 02 #Python
opencv-python的RGB与BGR互转方式
Jun 02 #Python
You might like
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
收藏的一个php小偷的核心程序
2007/04/09 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
PHP运行模式汇总
2016/11/06 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
js单向链表的具体实现实例
2013/06/21 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
python装饰器代码深入讲解
2021/03/01 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
英语自我评价范文
2014/01/24 职场文书
担保书格式及范文
2014/04/01 职场文书
大学生求职信
2014/06/17 职场文书
检讨书1000字
2014/10/11 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python