大文件下载---之内存溢出问题解决

来源:互联网 发布:mac os支持office 2016 编辑:程序博客网 时间:2024/05/21 12:40

我是在log日志下载的时候出现的错误,查了之后发现是文件过大造成内存溢出,因而下载出错。

报错:java.lang.OutOfMemoryError: Java heap space

正确代码:

@RequestMapping("/download")  public void download (HttpServletResponse response,@Param("url")String url) throws IOException{  String path = request.getSession().getServletContext().getRealPath("vod"+File.separator+"log"+File.separator+url);   try {             File file = new File(path);               if (file.exists()) {                  String filename = file.getName();                  InputStream fis = new BufferedInputStream(new FileInputStream( file));   //用BufferedInputStream读取文件                response.reset();                   response.setContentType("application/x-download");                response.addHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(),"iso-8859-1"));                response.addHeader("Content-Length", "" + file.length());                  OutputStream toClient = new BufferedOutputStream(response.getOutputStream());                 response.setContentType("application/octet-stream");                   byte[] buffer = new byte[1024];                   int i = -1;                   while ((i = fis.read(buffer)) != -1) {   //不能一次性读完,大文件会内存溢出(不能直接fis.read(buffer);)                    toClient.write(buffer, 0, i);                                      }                   fis.close();                   toClient.flush();                   toClient.close();              } else {                  PrintWriter out = response.getWriter();                  out.print("<script>");                  out.print("alert(\"not find the file\")");                  out.print("</script>");               }           } catch (IOException ex) {              PrintWriter out = response.getWriter();                  out.print("<script>");                  out.print("alert(\"not find the file\")");                  out.print("</script>");           }     }



原创粉丝点击