主要有几个步骤:
1、获取要下载的文件名
2、读取要下载的文件内容 (通过 ServletContext 对象可以读取,这个也是 ServletContext的应用)
3、获取要下载的文件类型
4、在回传前,通过响应头告诉客户端返回的数据类型
5、还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
Content-Disposition 响应头,表示收到的数据怎么处理
attachment 表示附件,表示下载使用
filename= 表示指定下载的文件名
6、把下载的文件内容回传给客户端
读取输入流中全部的数据,复制给输出流,输出给客户端
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
// 1、获取要下载的文件名
String downloadFileName = "2.jpg";
// 2、读取要下载的文件内容 (通过 ServletContext 对象可以读取)
ServletContext servletContext = getServletContext();
// 获取要下载的文件类型
String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
System.out.println("下载的文件类型:" + mimeType);
// 4、在回传前,通过响应头告诉客户端返回的数据类型
resp.setContentType(mimeType);
// 5、还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
// Content-Disposition 响应头,表示收到的数据怎么处理
// attachment 表示附件,表示下载使用
// filename= 表示指定下载的文件名
resp.setHeader("Content-Disposition", "attachment; filename=" + downloadFileName);
/**
* /斜杠被服务器解析表示地址为 http://ip:prot/工程名/ 映射 到代码的 Web 目录
*/
InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" +
downloadFileName);
// 获取响应的输出流
OutputStream outputStream = resp.getOutputStream();
// 3、把下载的文件内容回传给客户端
// 读取输入流中全部的数据,复制给输出流,输出给客户端
IOUtils.copy(resourceAsStream,outputStream);
}
resp.setHeader(“Content-Disposition”, “attachment; filename=” + downloadFileName);
设置了响应头 就会下载 否则浏览器就会直接打开
如果文件有中文怎么办?
就需要设置一下编码
URLEncoder