在B站观看了关于通过Response实现文件下载的方式(不需要第三方Jar包),现将代码记录如下:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//a.获取下载文件的路径(从相对路径转化为绝对路径)
String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/avatar.jpg");
//b.下载的文件名是啥
String filename = realPath.substring(realPath.lastIndexOf("\\") + 1);
//c.设置想办法让浏览器能够支持下载我们需要的东西,并设置文件名编码形式为UTF-8,可以识别中文文件名
response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"UTF-8"));
//d.获取下载文件的输入流
FileInputStream in = new FileInputStream(realPath);
//e.创建缓冲区
int len = 0 ;
byte[] buffer = new byte[1024];
//f.获取OutputStream对象,这里是要将文件写入到浏览器
ServletOutputStream out = response.getOutputStream();
//g.将FileOutputStream流写入到缓冲区,h.使用OutputStream将缓冲区的数据输出到客户端
while((len = in.read(buffer))!=-1){
out.write(buffer,0,len);
}
// 关闭资源
in.close();
out.close();
}