如何利用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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
Python字符串中添加、插入特定字符的方法
Sep 10 Python
python实现简易淘宝购物
Nov 22 Python
tensorboard显示空白的解决
Feb 15 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 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
小偷PHP+Html+缓存
2006/12/20 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
JS交换变量的方法
2015/01/21 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
java直接调用python脚本的例子
2014/02/16 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python如何将图片转换素描画
2020/09/08 Python
python 实现客户端与服务端的通信
2020/12/23 Python
html5 标签
2009/07/16 HTML / CSS
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
《雨霖铃》教学反思
2014/02/22 职场文书
汽车促销活动方案
2014/03/31 职场文书
三八活动策划方案
2014/08/17 职场文书
如何写早恋检讨书
2014/09/10 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
初中语文教师研修日志
2015/11/13 职场文书
高中物理教学反思
2016/02/19 职场文书
高一英语教学反思
2016/03/03 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
CSS基础详解
2021/10/16 HTML / CSS