如何利用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多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
Python全局变量操作详解
Apr 14 Python
python操作ie登陆土豆网的方法
May 09 Python
python动态加载包的方法小结
Apr 18 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
python 代码运行时间获取方式详解
Sep 18 Python
Python list和str互转的实现示例
Nov 16 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
教你用python控制安卓手机
May 13 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在Web开发领域的优势
2006/10/09 PHP
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
JavaScript中的其他对象
2008/01/16 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
Angular4编程之表单响应功能示例
2017/12/13 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python切换pip安装源的方法详解
2016/11/18 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python语言基本语句用法总结
2019/06/11 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Django REST framework内置路由用法
2019/07/26 Python
python实现最大优先队列
2019/08/29 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
法人授权委托书样本
2014/09/19 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
python编写五子棋游戏
2021/05/25 Python