1.准备工作
新建一个maven项目,配置好pom.xml、web.xml文件和Tomcat
2.新建一个FileServlet类
重写post和get方法,post里面调用get方法
get方法代码如下
//1.获取下载文件的路径
String realPath = "E:\\MarkDown学习\\SpringBoot\\" +
"javaweb-02-servlet\\response\\src\\main\\resources\\冷檬.jpg";
System.out.println(realPath);
//2.下载的文件名
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
//3.设置想办法让浏览器能够支持(Content-Disposition)下载我们需要的东西,
// 中文文件名URLEncoder.encode编码,否则有可能乱码
resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
//4.获取下载文件的输入流
FileInputStream in = new FileInputStream(realPath);
//5.创建缓冲区
int len = 0;
byte[] buffer = new byte[1024];
//6.获取输出流对象
ServletOutputStream out = resp.getOutputStream();
// 7. 将FileInputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端!
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
in.close();
out.close();
- Content-Disposition为属性名disposition-type是以什么方式下载,如attachment为以附件方式下载
- disposition-parm为默认保存时的文件名服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,
- 如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment
- realPath.lastIndexOf("\") ,返回字符串指定出现的最后一个字符的索引
3.注册Servlet和Servlet的请求路径
在web.xml配置如下代码
<servlet>
<servlet-name>down</servlet-name>
<servlet-class>com.nslt.servlet.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>down</servlet-name>
<url-pattern>/down</url-pattern>
</servlet-mapping>
内容来自下面链接
https://www.bilibili.com/video/BV12J411M7Sj?p=17