如何利用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设计模式之单例模式实例
Apr 26 Python
Python中的面向对象编程详解(上)
Apr 13 Python
python实现爬虫下载美女图片
Jul 14 Python
python 写的一个爬虫程序源码
Feb 28 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
Python实现的txt文件去重功能示例
Jul 07 Python
python调用支付宝支付接口流程
Aug 15 Python
学python爬虫能做什么
Jul 29 Python
Python3.9新特性详解
Oct 10 Python
Pycharm快捷键配置详细整理
Oct 13 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
python实现网络五子棋
Apr 11 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 feof用来识别文件末尾字符的方法
2010/08/01 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
Python的Flask框架中web表单的教程
2015/04/20 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
广播体操口号
2014/06/18 职场文书
机关保密工作承诺书
2015/05/04 职场文书
摘录式读书笔记
2015/07/01 职场文书
小学语文教学随笔
2015/08/14 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers