前一阵子做文件下载,按照以往的做法需要写循环操作输出流非常麻烦,基本都是拷贝,读写都不方便。
灵机一动我改用了IOUtils.copy 方法成功实现了操作,写起来比较简洁,看代码:
IOUtils.copy方便之处在于会自己处理缓存
//文件名
String myfileName=new String(filename.getBytes());
//需要下载的文件
String filepath=request.getSession().getServletContext().getRealPath(http://write.blog.csdn.net/postedit"/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();