前一阵子做文件下载,按照以往的做法需要写循环操作输出流非常麻烦,基本都是拷贝,读写都不方便。
灵机一动我改用了IOUtils.copy 方法成功实现了操作,写起来比较简洁,看代码:
- //文件名
- String myfileName=new String(filename.getBytes());
- //需要下载的文件
- String filepath=request.getSession().getServletContext().getRealPath("/test.jpg");
- File myfile = new File(filepath);
- // 清空response
- response.reset();
- // 设置response的Header
- response.addHeader("Content-Disposition", "attachment;filename=" + myfileName );
- response.addHeader("Content-Length", "" + myfile.length());
- response.setContentType("application/octet-stream");
- //打开文件输入流 和 servlet输出流
- OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
- InputStream fis = new BufferedInputStream(new FileInputStream(file));
- //通过ioutil 对接输入输出流,实现文件下载
- IOUtils.copy(fis, toClient);
- toClient.flush();
- //关闭流
- fis.close();
- toClient.close();