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();
        }
    
  • 相关阅读:
    Android 压力测试工具Monkey
    解决maven的依赖总是无法下载完成
    JDBC连接数据库(二)
    JDBC连接数据库(一)
    webdriver js点击无法点击的元素
    多线程Java面试题总结
    PHP unset销毁变量并释放内存
    ThinkPHP函数详解:D方法
    PHP 函数:intval()
    ThinkPHP 模板显示display和assign的用法
  • 原文地址:https://www.cnblogs.com/theone67/p/10937330.html
Copyright © 2011-2022 走看看