Fork me on GitHub

文件下载的Servlet

 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 }

 

posted @ 2020-04-08 20:27  CodeZhangJ  阅读(10)  评论(0)    收藏  举报