servlet(三)文件的下载

news2025/1/15 20:09:27

主要有几个步骤:
1、获取要下载的文件名
2、读取要下载的文件内容 (通过 ServletContext 对象可以读取,这个也是 ServletContext的应用)
3、获取要下载的文件类型
4、在回传前,通过响应头告诉客户端返回的数据类型
5、还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
Content-Disposition 响应头,表示收到的数据怎么处理
attachment 表示附件,表示下载使用
filename= 表示指定下载的文件名
6、把下载的文件内容回传给客户端
读取输入流中全部的数据,复制给输出流,输出给客户端

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
// 1、获取要下载的文件名
String downloadFileName = "2.jpg";
// 2、读取要下载的文件内容 (通过 ServletContext 对象可以读取)
ServletContext servletContext = getServletContext();
// 获取要下载的文件类型
String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
System.out.println("下载的文件类型:" + mimeType);
// 4、在回传前,通过响应头告诉客户端返回的数据类型
resp.setContentType(mimeType);
// 5、还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
// Content-Disposition 响应头,表示收到的数据怎么处理
// attachment 表示附件,表示下载使用
// filename= 表示指定下载的文件名
resp.setHeader("Content-Disposition", "attachment; filename=" + downloadFileName);
/**
* /斜杠被服务器解析表示地址为 http://ip:prot/工程名/ 映射 到代码的 Web 目录
*/
InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" +
downloadFileName);
// 获取响应的输出流
OutputStream outputStream = resp.getOutputStream();
// 3、把下载的文件内容回传给客户端
// 读取输入流中全部的数据,复制给输出流,输出给客户端
IOUtils.copy(resourceAsStream,outputStream);
}

resp.setHeader(“Content-Disposition”, “attachment; filename=” + downloadFileName);
设置了响应头 就会下载 否则浏览器就会直接打开
在这里插入图片描述

如果文件有中文怎么办?
就需要设置一下编码
URLEncoder
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web APIs 简介、DOM

文章目录一、Web APIs 简介1、Web APIs 和 JS 基础关联性2、API 和 Web API二、DOM1、DOM简介2、获取元素(1)根据ID获取(2)根据标签名获取(3)通过HTML5新增的方法获取(4)获取特殊元素…

【数据库数据恢复】oracle数据库执行truncate table的数据恢复案例

数据库恢复环境: 操作系统:windows server; 数据库:win_oracle_x64。 数据库故障&分析: oracle数据库误truncate table,备份无法使用。 oracle数据库误操作导致数据丢失是比较常见的一种故障&#xf…

《Linux运维总结:Centos7.6二进制安装Mysql8.0.30》

一、安装Mysql服务 1.1、下载二进制安装包 官方:二进制安装包下载 [rootlocalhost ~]# cd /data/pkgs [rootlocalhost pkgs]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz [rootlocalhost pkgs]# tar a…

启动报异常:org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping

目录 异常信息 异常原因 解决结果 异常信息 17:20:38.414 [main] ERROR o.s.b.SpringApplication - [reportFailure,870] - Application run failedorg.yaml.snakeyaml.parser.ParserException: while parsing a block mapping in reader, line 4, column 3: name: R…

JMeter分布式部署

目录 一、JMeter分布式执行原理 二、jmeter分布式部署 三、jmeter分布式执行 X、常见问题 1、Cannot start. localhost.localdomain is a loopback address 一、JMeter分布式执行原理 1、jmeter分布式压测时,选择其中一台作为调度机(master),其他机…

密码技术学习二:认证

1、单向散列函数 概念:单向散列函数有一个输入和一个输出,其中输入称为消息,输出称为散列值。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性; 单向散列函数输出的散列值也称为消…

ArcGis制作深度学习标签

项目场景: 在导入的tif文件上制作深度学习标签文件 问题描述 cv2读取导出标签tif文件是出现错误: imread_(/kaggle/input/a-small-jpg/headwrong.tif): cant read header: OpenCV(4.5.4) /tmp/pip-req-build-jpmv6t9_/opencv/modules/imgcodecs/src/grf…

independent watchdog 独立看门狗 window watchdog 窗口看门狗

看门狗(watchdog) 防止硬件因外界电磁场干扰或其他导致不能正常工作的,导致不可预料后果,对芯片进行实时检测的模块或芯片称为看门狗。 看门狗工作过程 启动看门狗后,有一个计数器从最大值递减,计数器减…

双层pdf-不用手动添加目录超链接教程

双层pdf最大的特点是文件既可以是文本型的(比如由word生成的文件),也可以是图像型的,既可以100%保留原始版面效果,又便于建立索引数据库,进行科学的管理。在标书中应用广泛。 使用软件:wordAdo…

Linux文件操作(基础IO)

在C、C、Python等语言中存在对文件操作的接口,通过这些接口我们可以创建文件,并实现文件内容的写入和读取,本文将介绍Linux下我们是如何进行文件操作的,并且深入底层的解析文件操作的原理。 文章目录一、C语言中的文件接口1.1 fop…

【pandas】教程:1-处理什么样的数据

pandas 处理什么样的数据? pandas 数据表格的表示 想存储一些 Titanic 乘客数据,知道姓名,年龄,性别等; df pd.DataFrame({"Name": ["Braund, Mr. Owen Harris","Allen, Mr. William Henry…

仪表板工具Stimulsoft Dashboards仪表板中的数据筛选元素介绍

Stimulsoft Ultimate是用于创建报告和仪表盘的通用工具集,包含九种产品,可以为任何受支持的平台创建报告和仪表板,适用于WinForms,ASP.NET,.NET Core,JavaScript,WPF,PHP&#xff0c…

Java EE 期末复习提纲【太原理工大学】

目录 一、题型 二、考点 1. MyBatis 2. Spring 3. Spring MVC 一、题型 1. 选择题 20 个,每个 1 分,共 20 分。 2. 填空题 20 个,每个 1 分,共 20 分。 3. 判断题 10 个,每个 1 分,共 10 分。 4. 程…

SSM1---MyBatis

MyBatis MyBatis环境搭建 我这个是使用IDEA&#xff0c;基于Maven搭建的 首先建立一个空的Maven项目或者模块在pom.xml中引入所需依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…

技术分享| 复盘一起看球场景

卡塔尔世界杯已经落幕&#xff0c;作为“后新冠时代”的首个大型全球体育赛事&#xff0c;也同时被多个“史上首次”与“历史之最”所装点&#xff0c;但同时也是国内疫情的高峰期&#xff0c;相信大多数人都是顶着高烧咳嗽跟好友线上看完了总决赛&#xff0c;对于线上互动一起…

民锋国际期货:期货交易 | 博弈之道,遵守法则

期货交易 | 博弈之道&#xff0c;遵守法则 对于一些好的书籍我会阶段性复读&#xff0c;因为每一次阅读都会有新的收获和更深的理解。这么做的目的是经过反复的咀嚼消化将其运用到交易实践中&#xff0c;为己所用。 最近重温了《海龟交易法则》&#xff0c;而第一次读这本书应…

C++TensorRT | TensorRT模型编译流程

tensorrt的工作流程如下图: 首先定义网络 优化builder参数 通过builder生成engine,用于模型保存、推理等 engine可以通过序列化和逆序列化转化模型数据类型(转化为二进制byte文件,加快传输速率) 再进一步推动模型由输入张量到输出张量的推理 代码结构: 定义 builder, con…

由手机号正则引发的思考,正则属性 lastIndex

问题&#xff1a; let reg /^1[3456789]\d{9}$/g 正则是验证手机号的证&#xff0c;为何突然不能验证正确的手机号了呢&#xff1f;其中有何蹊跷&#xff1f; 解决方案&#xff1a;底部有3种解决方案&#xff0c;方案3解决最稳妥 先来看一段正则&#xff1a; let reg /^1[3…

物联网架构实例—部标过检工具使用(物联网套件压测)

1.安装包 下载 2.安装MySQL数据库 如果安装时提示缺少C 2015的组件&#xff0c;需要执行vc_redist.x64.exe进行修改&#xff0c;直接双击执行vc_redist.x64.exe即可。 安装到这里&#xff0c;除了root账户外&#xff0c;另外需要增加一个gps账户&#xff0c;这个是过检工具连…

【电商】电商后台---价税管理

文章对电商后台系统中的价税管理进行了系统的介绍&#xff0c;希望通过此文能够加深你对电商系统的认识。 前面介绍了商品管理部分&#xff0c;从商品的属性、分类到商品资质、商品图片都做了说明&#xff0c;在梳理的过程中越发的感觉到每部分细节才是关键。但实话实说通过前几…