网站首页 > 基础教程 正文
前不久公司有个需求,把时序数据库中的日志下载到本地,大家都知道,数据库里的数据都是存在数据库里的(废话),想把他下载到客户的本地, 有的同学第一反应是: 只有文件才能下载,所以大多数同学会想到先把数据从数据库中读出来,然后写入到服务器中的某个文件夹下生成文件, 然后再下载。其实这是非常不效率的方法,最简单的方法是,我们从数据库中读取到文件后,直接以流的形式让用户去下载。
这里我拿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>
好了,很简单的一个分享,希望对大家有帮助
猜你喜欢
- 2024-11-04 苹果更新App 隐私保护说明 下载前可充分了解隐私权限
- 2024-11-04 HTML5 video 视频标签属性详解——前端小白必学知识
- 2024-11-04 实现PDF的预览和下载功能 pdf预览快捷键是什么
- 2024-11-04 标签制作软件如何制作学校标签 制作标签的软件有哪些
- 2024-11-04 标签制作软件如何制作商品标签模板
- 2024-11-04 标签制作软件如何制作配电箱标签 配电箱标签框
- 2024-11-04 Maven 的这 7 个问题你思考过没有?
- 2024-11-04 如何制作通用防伪标签 如何制作通用防伪标签图片
- 2024-11-04 Blob文件下载方式 blob如何下载
- 2024-11-04 MCGS触摸屏标签使用方法一 mcgs触摸屏功能
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)