文件下载

Posted 0error0warning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件下载相关的知识,希望对你有一定的参考价值。

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 }

 

以上是关于文件下载的主要内容,如果未能解决你的问题,请参考以下文章

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

代码片段 PHP,预期文件结尾,我错在哪里?

代码适用于与单个 html 文件不同的堆栈片段

VS code自定义用户代码片段snippet

Java itext为pdf 文件添加水印核心功能代码片段

VSCode自定义代码片段——声明函数