ITPub博客

首页 > 应用开发 > IT综合 > 几行代码教你用python web框架做文件流下载

几行代码教你用python web框架做文件流下载

原创 IT综合 作者:千锋Python唐小强 时间:2020-05-29 17:23:32 0 删除 编辑

前不久公司有个需求,把时序数据库中的日志下载到本地,大家都知道,数据库里的数据都是存在数据库里的(废话),想把他下载到客户的本地, 有的同学第一反应是: 只有文件才能下载,所以大多数同学会想到先把数据从数据库中读出来,然后写入到服务器中的某个文件夹下生成文件, 然后再下载。其实这是非常不效率的方法,最简单的方法是,我们从数据库中读取到文件后,直接以流的形式让用户去下载。

几行代码教你用python web框架做文件流下载

这里我拿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" download>文件下载</a>

好了,很简单的一个分享,希望对大家有帮助


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69923331/viewspace-2695133/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-14

  • 博文量
    995
  • 访问量
    775636