如何利用python web框架做文件流下载的实现示例
hello大家好,前不久公司里有个需求,把时序数据库中的日志下载到本地.大家都知道.数据库里的数据都是存在数据库里的(废话).想把他下载到客户的本地.有的同学第一反应是:只有文件才能下载.所以大多数同学会想到先把数据从数据库中读出来,然后写入到服务器中的某个文件夹下生成文件,然后再下载.其实这是非常不效率的方法,最简单的方法是,我们从数据库中读取到文件后,直接以流的形式让用户去下载.
这里我拿pythonflask框架来做例子,其实非常简单,步骤一共有3个
1:取出数据,我们默认为json文件吧
2:在response中加入指定的header
3:将数据返回.
那么废话少说,我们直接上代码:
#coding:utf-8 importjson fromflaskimportFlask,make_response app=Flask(__name__) @app.route('/download',methods=["GET"]) defdownload():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' returnresponse 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,这里主要定义文件的名称.这两部完成之后,我们只需要returnresponse即可,重点就在这两个header上,然后传入数据信息(这里我们定义了一个json,大家也可以定义其他文件,比如excel,当然excel请大家查询一下对应的content-type.还是非常简单的,这个方法对于任何web框架都是用,比如我们常用的django,tornadoweb.py都是一样,只不过语法在不同的框架里,方法名和用法可能有简单区别,但换汤不换药,原理是一样的.
最后说一下用法,一般来说下载的链接都是get所以前端只需要定义个a标签添加download属性即可,demo如下:
文件下载
到此这篇关于如何利用pythonweb框架做文件流下载的实现示例的文章就介绍到这了,更多相关python文件流下载内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!