如何利用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中使用dict和set方法的教程
Apr 27 Python
介绍Python中的fabs()方法的使用
May 14 Python
python相似模块用例
Mar 04 Python
pygame加载中文名mp3文件出现error
Mar 31 Python
Python列表对象实现原理详解
Jul 01 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
Python不支持 i ++ 语法的原因解析
Jul 22 Python
python中return不返回值的问题解析
Jul 22 Python
python实现感知机模型的示例
Sep 30 Python
python数据可视化使用pyfinance分析证券收益示例详解
Nov 20 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
图形数字验证代码
2006/10/09 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
9个比较实用的php代码片段
2016/03/15 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
Python 如何对文件目录操作
2020/07/10 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
打架检讨书400字
2014/01/17 职场文书
中年人生感言
2014/02/04 职场文书
同居协议书范本
2014/04/23 职场文书
团支部推优材料
2014/05/21 职场文书
商超业务员岗位职责
2015/02/13 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python