如何利用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实现截屏的函数
Jul 26 Python
python模拟Django框架实例
May 17 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
Django 使用logging打印日志的实例
Apr 28 Python
python处理“
Jun 10 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
基于python实现地址和经纬度转换
May 19 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
简单了解Python变量作用域正确使用方法
Jun 12 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 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简单操作mysql数据库的类
2015/04/16 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python django事务transaction源码分析详解
2017/03/17 Python
儿童python练习实例
2018/05/27 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
珍惜时间演讲稿
2014/05/14 职场文书
2014年班主任工作总结
2014/11/08 职场文书
铁路安全反思材料
2014/12/24 职场文书
纪录片信仰观后感
2015/06/08 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
Oracle使用别名的好处
2022/04/19 Oracle