如何利用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 flask中静态文件的管理方法
Mar 20 Python
利用python循环创建多个文件的方法
Oct 25 Python
python+opencv实现高斯平滑滤波
Jul 21 Python
django的ORM操作 增加和查询
Jul 26 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
python文字转语音实现过程解析
Nov 12 Python
基于pygame实现童年掌机打砖块游戏
Feb 25 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
Python实现扫码工具的示例代码
Oct 09 Python
Django前后端分离csrf token获取方式
Dec 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
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
纯php生成随机密码
2015/10/30 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
js DOM模型操作
2009/12/28 Javascript
起点页面传值js,有空研究学习下
2010/01/25 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
通过自学python能找到工作吗
2020/06/21 Python
介绍一下OSI七层模型
2012/07/03 面试题
大学四年的个人自我评价
2014/01/14 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android