现场还原,一下是下载大文件出现内存溢出的代码:
@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();
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有