如何利用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解析xml文件操作实例
Oct 05 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
Pandas探索之高性能函数eval和query解析
Oct 28 Python
python字典快速保存于读取的方法
Mar 23 Python
python线程中同步锁详解
Apr 27 Python
Python实现多条件筛选目标数据功能【测试可用】
Jun 13 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
Python算法中的时间复杂度问题
Nov 19 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 Python
总结Python连接CS2000的详细步骤
Jun 23 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
PHP 简单日历实现代码
2009/10/28 PHP
PHP会话控制实例分析
2016/12/24 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
python实现ip地址的包含关系判断
2020/02/07 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
python+requests接口自动化框架的实现
2020/08/31 Python
Python try except finally资源回收的实现
2021/01/25 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
C,C++的几个面试题小集
2013/07/13 面试题
"序列点" 是什么
2016/07/29 面试题
Android面试题及答案
2015/09/04 面试题
C#中的验证控件有几种
2014/03/08 面试题
新闻系毕业生推荐信
2013/11/16 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
群众路线领导对照材料
2014/08/23 职场文书
师范生见习自我总结
2015/06/23 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
python使用torch随机初始化参数
2022/03/22 Python
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS