如何利用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中signal包的使用
Nov 13 Python
Python环境下安装使用异步任务队列包Celery的基础教程
May 07 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
让代码变得更易维护的7个Python库
Oct 09 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
Django 开发环境配置过程详解
Jul 18 Python
python  logging日志打印过程解析
Oct 22 Python
python实现滑雪者小游戏
Feb 22 Python
python中温度单位转换的实例方法
Dec 27 Python
Python基础知识学习之类的继承
May 31 Python
OpenCV实现常见的四种图像几何变换
Apr 01 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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编码规范
2015/09/28 PHP
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
python3使用GUI统计代码量
2019/09/18 Python
Python属性和内建属性实例解析
2020/01/14 Python
Python之变量类型和if判断方式
2020/05/05 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
python中adb有什么功能
2020/06/07 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
优秀学生自我鉴定范例
2013/12/18 职场文书
法学个人求职信范文
2014/01/27 职场文书
学习自我鉴定
2014/02/01 职场文书
2014年施工员工作总结
2014/11/18 职场文书
结婚老公保证书
2015/02/26 职场文书