如何利用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每次处理固定个数的字符的方法总结
Jan 29 Python
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
python 数据的清理行为实例详解
Jul 12 Python
Python中import机制详解
Nov 14 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
基于DataFrame改变列类型的方法
Jul 25 Python
详解python tkinter教程-事件绑定
Mar 28 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 Python
python某漫画app逆向
Mar 31 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的call_user_func传reference引发的思考
2010/07/23 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
php array_map()函数实例用法
2021/03/03 PHP
JS中showModalDialog 的使用解析
2013/04/17 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
JS拉起或下载app的实现代码
2017/02/22 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
进一步理解Python中的函数编程
2015/04/13 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python实现通讯录功能
2018/02/22 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
会计专业个人求职信范文
2014/01/08 职场文书
聚美优品的广告词
2014/03/14 职场文书
一年级语文教学随笔
2015/08/14 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python