如何利用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的random模块及加权随机算法的python实现方法
Jan 04 Python
python机器学习库常用汇总
Nov 15 Python
Python针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
Oct 15 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
python pycharm的安装及其使用
Oct 11 Python
python为QT程序添加图标的方法详解
Mar 09 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Python如何操作docker redis过程解析
Aug 10 Python
python 爬取B站原视频的实例代码
Sep 09 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
基于pear auth实现登录验证
2010/02/26 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
js实现3D旋转相册
2020/08/02 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
python实现井字棋游戏
2020/03/30 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
白宫黑市官网:White House Black Market
2016/11/17 全球购物
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
电气工程师岗位职责
2015/02/12 职场文书
医生辞职信范文
2015/03/02 职场文书
家庭贫困证明
2015/06/16 职场文书