一、背景介绍
工作中开发平台需要支持一个文件下载功能,使用的服务端框架是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",浏览器会提示用户下载该文件,而不是在浏览器中直接打开它