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

访客 阅读:163 2020-05-20 08:25:30 评论:0

我是在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>");    
        }    
  } 



声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
关注我们

扫一扫关注我们,了解最新精彩内容