如何利用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配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python制作爬虫采集小说
Oct 25 Python
Python实现多线程抓取网页功能实例详解
Jun 08 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
Python 定义只读属性的实现方式
Mar 05 Python
Django中的session用法详解
Mar 09 Python
keras 多任务多loss实例
Jun 22 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
Python Merge函数原理及用法解析
Sep 16 Python
OpenCV 图像梯度的实现方法
Jul 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
php 字符串函数收集
2010/03/29 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
php按单词截取字符串的方法
2015/04/07 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
网上应用的一个不错common.js脚本
2007/08/08 Javascript
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
Python urlopen()函数 示例分享
2014/06/12 Python
Python二分查找详解
2015/09/13 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Python按钮的响应事件详解
2019/03/04 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
pymysql模块使用简介与示例
2020/11/17 Python
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
留学生求职信
2014/06/03 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
导游词之山东孔庙
2019/11/04 职场文书