HttpServletResponse实现简单的文件下载功能
1、实现下载功能大致需要以下几个步骤:
- 获取到文件所在路径
- 获取文件名
- 设置浏览器的响应头,确保浏览器是下载文件,而不是解析文件
- 创建文件的输入流
- 创建缓冲区
- 获取servlet输出流
- 将输入流写入输出流中
2、具体逻辑代码如下
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//实现下载功能所需要的步骤:
//1.获取文件所在路径
String path = "D:\\ProgramFiles\\apache-tomcat-9.0.37\\webapps\\r1\\WEB-INF\\classes\\1.jfif";
System.out.println(path);
//2.获取文件名
String filename = path.substring(path.lastIndexOf('\\') + 1);
System.out.println(filename);
//3.设置浏览器支持我们下载的东西
resp.setHeader("content-disposition", "attachment;filename=" + filename);
//4.获取下载文件的输入流
FileInputStream in = new FileInputStream(path);
//5.创建缓冲区
int len = 0;
byte[] buffer = new byte[1024];
//6.获取输出流对象
OutputStream out = resp.getOutputStream();
//7.将读取的流写入buffer缓冲区中,并通过输出流输出
while((len = in.read(buffer)) > 0){
out.write(buffer,0, len);
}
}
3、要点
- 设置浏览器的响应头,只有设置了该属性浏览器才不会直接解析他能解析的文件,而是我们想要的下载。
resp.setHeader("content-disposition", "attachment;filename=" + filename); - 如果你的文件名是中文的,那么仅按上面设置会出现你下载的文件名中文乱码问题。
resp.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));
将编码格式设置为UTF-8,是浏览器能够识别的编码格式。

浙公网安备 33010602011771号