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

我是在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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值