1 package com.dream.download;
2
3 import javax.servlet.ServletContext;
4 import javax.servlet.ServletException;
5 import javax.servlet.ServletOutputStream;
6 import javax.servlet.annotation.WebServlet;
7 import javax.servlet.http.HttpServlet;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10 import java.io.FileInputStream;
11 import java.io.IOException;
12
13 /**
14 * @author ZhangJun
15 * @date 2020-04-08
16 * @description
17 */
18 @WebServlet("/downloadServlet")
19 public class DownloadServlet extends HttpServlet {
20 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
21 /**
22 * 定义Servlet
23 * 1. 获取文件名称
24 * 2. 使用字节输入流加载文件进内存
25 * 3. 指定response的响应头: content-disposition:attachment;filename=xxx
26 * 4. 将数据写出到response输出流
27 */
28 //1.获取文件名称【请求参数】
29 String fileName = request.getParameter("fileName");
30 //2.使用字节输入流加载文件进入内存
31 //2.1 找到文件服务器的路径
32 ServletContext servletContext = this.getServletContext();
33 //2.2 知道真实路径
34 String realPath = servletContext.getRealPath("/img/" + fileName);
35 //2.3 用字节输入流
36 FileInputStream fileInputStream = new FileInputStream(realPath);
37 //2.4设置response的响应头
38 //2.4.1 设置响应头类型
39 String mimeType = servletContext.getMimeType(fileName);//获取文件的mime类型
40 response.setHeader("content-type",mimeType);
41 //2.4.2 设置响应头得打开方式
42 response.setHeader("content-disposition","attachment;filename="+fileName);
43 //3将输入流的数据写出到输出流中
44 ServletOutputStream outputStream = response.getOutputStream();
45 //缓冲区
46 byte[] bytes = new byte[1024];
47 //设置读取的个数
48 int len =0 ;
49 while(fileInputStream.read(bytes)!=-1){
50 outputStream.write(bytes,0,len);
51 }
52 fileInputStream.close();
53 }
54 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
55 this.doPost(request, response);
56 }
57 }