码迷,mamicode.com
首页 > 其他好文 > 详细

文件下载

时间:2020-03-25 01:02:00      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:需要   net   exception   protect   bsp   public   中国   浏览器   附件   

response.setHeader("Content-Disposition", "attachment; fileName=a.jpg");
这个响应头告诉浏览器。 这是需要下载的。 而 attachment 表示附件, 也就是下载的一个文件。 fileName=后面,表示下载的文件名。

代码:

 1 import org.apache.commons.io.IOUtils;
 2 import sun.misc.BASE64Encoder;
 3 
 4 import javax.servlet.ServletContext;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.ServletOutputStream;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.net.URLEncoder;
14 
15 @WebServlet("/downloadServlet")
16 public class DownloadServlet extends HttpServlet {
17     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18         // 1、获取要下载的文件名
19         String downfile = "a.jpg";
20         //2、读取要下载的文件内容 (通过ServletContext对象可以读取)
21         ServletContext servletContext = getServletContext();
22         // 获取要下载的文件类型
23         String mimeType = servletContext.getMimeType("/images/" + downfile);
24         //4、在回传前,通过响应头告诉客户端返回的数据类型
25         response.setContentType(mimeType);
26         //5、还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
27         // Content-Disposition响应头,表示收到的数据怎么处理
28         // attachment表示附件,表示下载使用
29         // filename= 表示指定下载的文件名
30         // url编码是把汉字转换成为%xx%xx的格式
31         // 判断是否是火狐浏览器
32         if (request.getHeader("User-Agent").contains("Firefox")) {
33             // 使用下面的格式进行 BASE64 编码后
34             response.setHeader("Content-Disposition", "attachment; filename==?UTF-8?B?" + new BASE64Encoder().encode("中国.jpg".getBytes("UTF-8")) + "?=");
35         } else {
36             // 把中文名进行 UTF-8 编码操作。
37             response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("中国.jpg", "UTF-8"));
38         }
39         InputStream resourceAsStream = servletContext.getResourceAsStream("/images/" + downfile);
40         // 获取响应的输出流
41         ServletOutputStream outputStream = response.getOutputStream();
42         //3、把下载的文件内容回传给客户端
43         // 读取输入流中全部的数据,复制给输出流,输出给客户端
44         IOUtils.copy(resourceAsStream, outputStream);
45     }
46 }

 

文件下载

标签:需要   net   exception   protect   bsp   public   中国   浏览器   附件   

原文地址:https://www.cnblogs.com/0error0warning/p/12563286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!