Tornado服务实现文件下载功能

一、背景介绍

工作中开发平台需要支持一个文件下载功能,使用的服务端框架是Tornado,前端是Element

二、实现思想

开发一个get接口,请求参数包含文件名,到指定目录下寻找该文件,将文件内容以流的形式写入HTTP响应中

复制代码
 filename = self.get_argument('filename')
 file_path = static_dir + "/xxxx/" + filename
 # http头浏览器自动识别为文件下载
 self.set_header('Content-Type', 'application/octet-stream')
 # 下载时显示的文件名称
 self.set_header('Content-Disposition', 'attachment; filename=%s' % filename)
 with open(file_path, 'rb') as f:
     while True:
         data = f.read(1024)
         if not data:
             break
         self.write(data)
 # 记得一定要有finish
 self.finish()
  • application/octet-stream:是一种通用的MIME类型,用于表示二进制数据。它告诉接收方应该将消息体解释为一系列字节,而不进行任何特定的解析或解码
  • Content-Disposition:用于指示浏览器将响应与特定的文件或文档关联起来。filename 是一个变量,表示要使用的文件名。表示的意思是将响应的内容视为与名为 filename 的文件相关联的附件。设置Content-Disposition为"attachment",浏览器会提示用户下载该文件,而不是在浏览器中直接打开它
相关推荐
m0_6265352016 分钟前
力扣题目练习 换水问题
python·算法·leetcode
软件技术NINI27 分钟前
MATLAB疑难诊疗:从调试到优化的全攻略
javascript·css·python·html
Q_Q19632884751 小时前
python+uniapp基于微信小程序的助眠小程序
spring boot·python·小程序·django·flask·uni-app·node.js
ZYMFZ1 小时前
python面向对象
前端·数据库·python
wangqiaowq1 小时前
ImmutableList.of() 是 Google Guava 库 提供的一个静态工厂方法,用于创建一个不可变的(immutable)列表。
开发语言·windows·python
滑水滑成滑头1 小时前
**发散创新:多智能体系统的探索与实践**随着人工智能技术的飞速发展,多智能体系统作为当今研究的热点领域,正受到越来越多关注
java·网络·人工智能·python
2401_841495641 小时前
【数据结构】最长的最短路径的求解
java·数据结构·c++·python·算法·最短路径·图搜索
流浪大叔1 小时前
Python下载实战技巧的技术文章大纲
开发语言·python
用户68545375977691 小时前
🎯 Python迭代器与生成器:从入门到"哦原来如此!"
python