zoukankan      html  css  js  c++  java
  • 下载文件出现内存溢出问题

    现场还原,一下是下载大文件出现内存溢出的代码:

        @RequestMapping(value = "/downLoadBackupFile")
        public ResponseEntity<byte[]> downloadBackupFile(Integer id, HttpServletResponse response) throws Exception{
            String path = eqm.findAddr(id);
            File file = new File(path);
            String fileName = file.getName();
            byte[] body = null;
            InputStream is = new FileInputStream(file);
            body = new byte[is.available()];                                            // 报错显示该行出现内存溢出问题,new了一个非常大的byte数组
            is.read(body);
            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Disposition", "attchement;filename=" + fileName);
            HttpStatus statusCode = HttpStatus.OK;
            ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
            return entity;
        }
    

    应该修改为:

    @RequestMapping(value = "/downLoadBackupFile", method = RequestMethod.GET)
        public void downloadBackupFile(Integer id, HttpServletResponse response) throws Exception{
            String path = eqm.findAddr(id);
            File file = new File(path);
            String fileName = file.getName();
    
            response.reset();
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attchement;filename=" + fileName);
            response.setHeader("Content-Length", file.length() + "");
    
            InputStream bfis = new BufferedInputStream(new FileInputStream(file));
            OutputStream ops = new BufferedOutputStream(response.getOutputStream());
            byte[] body = new byte[1024];
            int i = -1;
            while ((i = bfis.read(body)) != -1){
                ops.write(body, 0, i);
            }
            bfis.close();
            ops.flush();
            ops.close();
        }
    
  • 相关阅读:
    最大正数pascal程序
    部落卫队pascal解题程序
    使用递归和非递归遍历二叉树
    机器学习 Numpy库入门
    C++ 多态性和虚函数
    C++ 利用栈解决运算问题
    C++ 字符串分割
    C++继承与派生
    机器学习基础
    C++ 输出文件编码控制
  • 原文地址:https://www.cnblogs.com/theone67/p/10937330.html
Copyright © 2011-2022 走看看