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",浏览器会提示用户下载该文件,而不是在浏览器中直接打开它
相关推荐
花酒锄作田10 小时前
使用 pkgutil 实现动态插件系统
python
前端付豪14 小时前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽15 小时前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战15 小时前
Pydantic配置管理最佳实践(一)
python
阿尔的代码屋21 小时前
[大模型实战 07] 基于 LlamaIndex ReAct 框架手搓全自动博客监控 Agent
人工智能·python
AI探索者2 天前
LangGraph StateGraph 实战:状态机聊天机器人构建指南
python
AI探索者2 天前
LangGraph 入门:构建带记忆功能的天气查询 Agent
python
FishCoderh2 天前
Python自动化办公实战:批量重命名文件,告别手动操作
python
躺平大鹅2 天前
Python函数入门详解(定义+调用+参数)
python
曲幽2 天前
我用FastAPI接ollama大模型,差点被asyncio整崩溃(附对话窗口实战)
python·fastapi·web·async·httpx·asyncio·ollama