大文件下载—之内存溢出问题解决详解编程语言

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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17457.html

(0)
上一篇 2021年7月19日 20:12
下一篇 2021年7月19日 20:12

相关推荐

发表回复

登录后才能评论