HttpServletResponse文件下载实例(OutputStream)

HttpServletResponse文件下载流程如下:

1.获取要下载的文件的绝对路径

2.获取要下载的文件名

3.设置content-disposition响应头控制浏览器以下载的形式打开文件

4.获取要下载的文件输入流

5.创建数据缓冲区//缓冲区解释见下文

6.通过response对象获取OutputStream流

7.将FileInputStream流写入到buffer缓冲区

8.使用OutputStream将缓冲区的数据输出到客户端浏览器

OutputStream下载xls文件例子如下:

//HttpServletResponse OutputStream下载xls文件
@RequestMapping("/download")
public void download(HttpServletRequest req,HttpServletResponse res){
	String fileName = "51gjie java教程.xls";//要下载的文件名
	String realPath = req.getSession().getServletContext().getRealPath("/wbms/download");
	File file=new File(realPath+"/"+fileName); //设置content-disposition响应头控制浏览器以下载的形式打开文件
	res.setCharacterEncoding("utf-8");
	res.setContentType("application/octet-stream");
	res.setHeader("Content-Disposition", "attachment;fileName="+ URLEncoder.encode("javaschool.xls", "UTF-8"));
	InputStream inputStream=new FileInputStream(file);根据路径获取要下载的文件输入流 
	OutputStream out = res.getOutputStream();
	byte[] b=new byte[1024];  //创建数据缓冲区
	int length;  
	while((length=inputStream.read(b))>0){  把文件流写到缓冲区里
		out.write(b,0,length);  
	}  
	out.flush();
	out.close();
	inputStream.close();
}

推荐使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。