Servlet文件的下载

第一种方法直接在前端使用超链接,也就是a标签

浏览器不能识别会直接下载(像压缩文件不能直接下载),浏览器能识别,想要下载加一个download属性。download可以不写任何信息。

首先在web下建一个文件,放需要下载的文件

 前端代码:

 

<body>
<a href="download/8SR]W6{XY95QAENBX01XGBD.png">图片文件</a>
<a href="download/111.txt">文本文件</a>
<!--浏览器不能识别的文件-->
<a href="download/111.zip">压缩文件</a>
<hr>
<a href="download/8SR]W6{XY95QAENBX01XGBD.png" download="java.png">图片文件</a>
<a href="download/111.txt" download>文本文件</a>
</body>
</html>

 启动后点击页面中的超链接就可以下载。

第二种方式:后台实现下载

1. 需要通过 response.setContentType 方法设置 Content-type 头字段的值, 为浏览器无法使用某
种方式或激活某个程序来处理的 MIME 类型,例 如 "application/octet-stream" "application/x-
msdownload" 等。
2. 需要通过 response.setHeader 方法设置 Content-Disposition 头的值 为 "attachment;filename=
文件名 "
3. 读取下载文件,调用 response.getOutputStream 方法向客户端写入附件内容。
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("-----文件下载-------");//设置请求的编码格式request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//获取参数(得到要下载的文件名,前端传来的)String fileName = request.getParameter("fileName");//参数的非空判断 trim();去除字符串的前后空格if(fileName == null || "".equals(fileName.trim())){response.getWriter().write("请输入要下载的文件名");response.getWriter().close();return;}//得到图片存放的路径String path = request.getServletContext().getRealPath("/download/");//通过路径得到file对象File file = new File(path + fileName);if(file.exists() && file.isFile()){//设置响应类型(浏览器无法使用某种方式或激活某个程序来处理MIME类型)response.setContentType("application/x-msdownload");//设置响应头response.setHeader("Content-Disposition","attachment;filename"+fileName);//得到file文件输入流InputStream in  = new FileInputStream(file);//得到字节输出流ServletOutputStream out = response.getOutputStream();//定义byte数组byte[] bytes = new byte[1024];//定义长度int len = 0;//循环输出while((len = in.read(bytes)) != -1){//输出out.write(bytes,0,len);}//关闭资源out.close();in.close();}else{response.getWriter().write("文件不存在,请重试!");response.getWriter().close();}}
}

----------------------------------------------------------------

简化的代码

@WebServlet("/downloadServlet02")
public class DownLoadSimple extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 设置请求的编码request.setCharacterEncoding("UTF-8");// 获取文件下载路径String path = getServletContext().getRealPath("/");// 获取要下载的文件名String name = request.getParameter("fileName");// 通过路径得到file对象File file = new File(path + name);// 判断file对象是否存在,且是否是一个标准文件if (file.exists() && file.isFile()) {// 设置响应类型 (浏览器无法使用某种方式或激活某个程序来处理的类型)response.setContentType("application/x-msdownload");// 设置头信息response.setHeader("Content-Disposition", "attachment;filename=" + name);// 得到输入流InputStream is = new FileInputStream(file);// 得到输出流ServletOutputStream os = response.getOutputStream();// 定义byte数组byte[] car = new byte[1024];// 定义长度int len = 0;// 循环 输出while ((len = is.read(car)) != -1) {os.write(car, 0, len);}// 关闭流 释放资源os.close();is.close();} else {System.out.println("文件不存在,下载失败!");}}
}

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

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

相关文章

在Windows 10和11中恢复已删除的照片

可以在Windows 10或11上恢复已删除的照片吗&#xff1f; 随着技术的发展&#xff0c;越来越多的用户习惯在电子设备上存储照片。如果这些照片被删除&#xff0c;可能会给用户带来重大损失。当照片丢失时&#xff0c;您可能会想是否可以恢复已删除的照片&#xff1f; …

Kafka原理剖析

一、简介 Kafka是一个分布式的、分区的、多副本的消息发布-订阅系统&#xff0c;它提供了类似于JMS的特性&#xff0c;但在设计上完全不同&#xff0c;它具有消息持久化、高吞吐、分布式、多客户端支持、实时等特性&#xff0c;适用于离线和在线的消息消费&#xff0c;如常规的…

内网隧道代理技术(十五)之 Earthworm的使用(二级代理)

Earthworm的使用(二级代理) 本文紧接着上一篇文章继续讲解Earthworm工具的使用 (二级代理)正向连接 二级正向代理发生在如下的情况: 1、Web服务器在公网,黑客可以直接访问 2、B机器在内网,黑客不能直接访问 3、Web服务器可以访问内网机器B 4、内网机器B可以访问公司…

ARM将常数加载到寄存器方法之LDR伪指令

一、是什么&#xff1f; LDR Rd,const伪指令可在单个指令中构造任何32位数字常数,使用伪指令可以生成超过MOV和MVN指令 允许范围的常数. 实现原理: (1)如果可以用MOV或MVN指令构造该常数,则汇编程序会生成适当的指令 (2)如果不能用MOV或MVN指令构造该常数,则汇编程序会执行下列…

【UE5】快速认识入门

目录 &#x1f31f;1. 快速安装&#x1f31f;2. 简单快捷键操作&#x1f31f;3. 切换默认的打开场景&#x1f31f;4. 虚幻引擎术语 &#x1f31f;1. 快速安装 进入Unreal Engine 5官网进行下载即可&#xff1a;UE5 &#x1f4dd;官方帮助文档 打开后在启动器里创建5.2.1引擎…

Vue2 第七节 Vue监测数据更新原理

&#xff08;1&#xff09;Vue会监视data中所有层次的数据 &#xff08;2&#xff09;如何监测对象中的数据 通过setter实现监视&#xff0c;且要在new Vue时传入要监测的数据对象中后追加的属性&#xff0c;Vue默认不做响应式处理如果要给后添加的属性做响应式&#xff0c;使…

【雕爷学编程】MicroPython动手做(18)——掌控板之声光传感器2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

小研究 - 基于解析树的 Java Web 灰盒模糊测试(二)

由于 Java Web 应用业务场景复杂, 且对输入数据的结构有效性要求较高, 现有的测试方法和工具在测试Java Web 时存在测试用例的有效率较低的问题. 为了解决上述问题, 本文提出了基于解析树的 Java Web 应用灰盒模糊测试方法. 首先为 Java Web 应用程序的输入数据包进行语法建模创…

【C++】模板

前言 在我们平时的代码中经常会有不同类型的变量去执行效果差不多的函数。比如&#xff1a;swap(交换)&#xff0c;sort(排序)。这些函数里其实会有大部分重复的段落&#xff0c;在这种情况下我们会使用重载函数&#xff0c;但是函数重载会有如下的问题&#xff1a; 1. 重载的函…

测试开源C#人脸识别模块ViewFaceCore(4:口罩检测、性别预测、年龄预测)

ViewFaceCore模块中的MaskDetector类支持识别人脸是否戴了口罩或有遮挡&#xff0c;主要调用PlotMask函数执行口罩检测操作&#xff0c;其函数原型如下所示&#xff1a; PlotMaskResult PlotMask<T>(T image, FaceInfo info)public class PlotMaskResult{//// 摘要:// …

RabbitMQ 教程 | 第2章 RabbitMQ 入门

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

VMware Linux 可视化增加磁盘

1、VMware 增加磁盘 2、disks挂载磁盘 此处我挂载的是20G磁盘&#xff0c;截图只是用5G的做过程演示例子。 3、验证挂载磁盘

动手学深度学习v2笔记 —— 线性回归 + 基础优化算法

二 动手学深度学习v2 —— 线性回归 基础优化算法 目录: 线性回归基础优化方法 1. 线性回归 总结 线性回归是对n维输入的加权&#xff0c;外加偏差使用平方损失来衡量预测值和真实值的差异线性回归有显示解线性回归可以看作是单层神经网络 2. 基础优化方法 梯度下降 小批量…

Spring的创建及使用

文章目录 什么是SpringSpring项目的创建存储Bean对象读取Bean对象getBean()方法 更简单的读取和存储对象的方式路径配置使用类注解存储Bean对象关于五大类注解使用方法注解Bean存储对象Bean重命名 Bean对象的读取 使用Resource注入对象Resource VS Autowired同一类型多个bean对…

echart折线图,调节折线点和y轴的间距(亲测可用)

options代码&#xff1a; options {tooltip: {trigger: axis, //坐标轴触发&#xff0c;主要在柱状图&#xff0c;折线图等会使用类目轴的图表中使用。},xAxis: {type: category,//类目轴&#xff0c;适用于离散的类目数据&#xff0c;为该类型时必须通过 data 设置类目数据。…

iOS开发-启动页广告实现

iOS开发-启动页广告实现 启动页广告实现是一个非常常见的广告展示模式。 就是在启动时候显示广告&#xff0c;之后点击跳转到广告页面或者其他APP。 一、实现启动页广告 启动页广告控件实现&#xff0c;将View放置在keyWindow上&#xff0c;显示广告图片&#xff0c;点击广告…

Pytorch(二)

一、分类任务 构建分类网络模型 必须继承nn.Module且在其构造函数中需调用nn.Module的构造函数无需写反向传播函数&#xff0c;nn.Module能够利用autograd自动实现反向传播Module中的可学习参数可以通过named_parameters()返回迭代器 from torch import nn import torch.nn.f…

C++部署学习

gcc -E src/main.c -o src/main.i gcc -S src/main.c -o src/main.s gcc -C src/main.c -o src/main.o gcc src/main.c -o exec ./exec

RabbitMQ 教程 | 第3章 客户端开发向导

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…