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原创文章,未经本站允许不得转载。