1.在服务器端获取下载的文件名称(downLoadName)
String downLoadName = "文件名";
2.读取该文件
//通过servletContenxt对象获取,不是req.getParameter()
ServletContext servletContext = req.getServletContext();
//在服务器中“/”表示直接为http://ip:part/项目名 服务器映射到web目录下
InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downLoadName);
3.将获取的数据从输入流传到输出流(这次不使用数组传数据流,直接使用工具类方法--IOUtils.copy())
//创建输出流
OutputStream outputStream = resp.getOutputStream();
//使用IOUtils.copy(),见明知意,直接将输入流数据复制到输出流
IOUtils.copy(resourceAsStream,outputStream);
4.在回传数据之前必须告诉客户端(浏览器)他要下载文件的类型(通过请求头Header告诉),而下载文件的类型可以在2中知道,方法如下
String mimeTyoe = servletContext.getMimeType("/file" + downLoadName);
而需要通过请求头告诉客户端,这一步应该在回传数据前操作,故先操作4,再操作3
resp.setContextType(mimeType);
5.通过请求头告诉客户端下载文件类型外,还需要告诉客户端收到的数据是要下载使用,故还是使用请求头告诉客户端,操作如下
//你需要知道
//Context-Disposition 表示客户端对收到数据进行处理,
//attachment 附件的意思,即表示对数据下载的意思,再加上文件名
resp.setHeader("Context-Disposition","attachment;filename = " + downLoadName);
总结,代码步骤顺序为 1、2、4、5、3.