网站首页 > 精选文章 正文
其实文件下载,几乎在所有的网页中都有应用,实现方式都几乎一致,无非就是,找到文件的存储路径,然后获取文件输入流,然后利用文件输出流把文件输出出来。要想在网页中正确的输出文件,一定要注意响应头的设置,首先要告诉我输出的文件是什么类型?需要设置
Content-Type:application/octet-stream,其次要设置Content-Disposition:attachment;filename=xxx.docx。告诉浏览器你输出的名字是啥,只要听懂这几点,你下载可以闭眼写,这就是基本的Servlet下载核心。老铁们,如果你觉得该文章对你有用,请评论区留言,谢谢,以下是实现过程,请您笑纳。
HTML实现过程
<html>
<header>
<meta charset="UTF-8"/>
<meta content="text/html;charset=utf-8"/>
</header>
<body>
<a href="/download?filename=abc.docx">download</a>
</body>
</html>
Servlet实现过程
package com.kuang.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet("/download")
public class downloadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
response.setCharacterEncoding("UTF-8");
String fileName = request.getParameter("filename");
if (fileName.equals("")) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("文件名不存在");
response.getWriter().close();
return;
}
String path = this.getServletContext().getRealPath("/download/");
String filePath = path + fileName;
File file = new File(filePath);
if (file.exists() && file.isFile()) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
//获取输入流
FileInputStream fileInputStream = new FileInputStream(file);
//获取输出流
ServletOutputStream fileOutputStream = response.getOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fileInputStream.read()) != -1) {
fileOutputStream.write(bytes, 0, len);
}
fileInputStream.close();
fileOutputStream.close();
} else {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("下载文件不存在或丢失");
response.getWriter().close();
return;
}
}catch (Exception ee){
resp.setContentType("text/html;charset=utf-8");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().write("异常"+ee.getMessage());
ee.printStackTrace();
resp.getWriter().close();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Maven配置
<dependencies>
<!--Servlet 依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--JSP依赖-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<!--JSTL依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
<build>
<finalName>servlet-01</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
猜你喜欢
- 2025-05-08 jQuery文件下载方法及引入HTML语法
- 2025-05-08 python编程实践:下载文件模块wget的使用
- 2025-05-08 快速将网站从HTTP升级到HTTPS教程
- 2025-05-08 python原始套接字socket下载https网页文件到txt
- 2025-05-08 应用层协议HTTP和HTTPS,一篇文章学会
- 2025-05-08 百度网盘与360云盘哪个好(百度网盘与360网盘的区别)
- 2025-05-08 SPRINGBOOT 实现大文件上传下载、分片、断点续传教程
- 2025-05-08 SPRING BOOT实现文件上传和下载(spring boot 文件上传下载)
- 2025-05-08 YouTube应用下载全攻略:安卓、iOS及视频下载指南
- 2025-05-08 Burp Suite显示HTTP消息中的中文字符设置(附字体下载)
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)