2.下载GC日志,系统dump文件用于分析
1)在系统中找到唯一ResponseEntity有关的代码
2)这代码看似没什么问题啊,这不是很正常的文件下载么???我去看看用户下载了啥,跑到目录文件查看一下下。
3)成功破案了,用户下载了一份大文件,文件先加载到内存才往外写,抹泪。。。。
@GetMapping("/down") public ResponseEntity download(@RequestParam("uri") String uri) throws IOException { File file = new File(uri); if (!file.isFile()) { throw new ServiceException("文件不存在"); } String filename = FilenameUtils.getName(uri); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); HttpStatus status = HttpStatus.OK; return new ResponseEntity<>(new FileSystemResource(file), headers, status); }2.使用缓存流,边读边写
@GetMapping("/down") public void download(@RequestParam("uri") String uri, HttpServletResponse response) throws IOException { File file = new File(uri); if (!file.isFile()) { throw new ServiceException("文件不存在"); } String filename = FilenameUtils.getName(uri); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); // 堆代码 duidaima.com try (FileInputStream fileInputStream = new FileInputStream(file); BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream())) { FileCopyUtils.copy(bufferedInputStream, bufferedOutputStream); } finally { // 使用的是try-with-resources } }3.文件存储到 oss 或者是七牛云