【发布时间】:2018-04-07 18:05:20
【问题描述】:
假设我正在使用 Spring 设计一个 REST 服务,并且我需要一个接受文件并返回某种 ResponseDto 的方法。应用程序服务器的 POST 请求大小限制为 100MB。这是假设的弹簧控制器方法实现:
public ResponseEntity<ResponseDto> uploadFile(@RequestBody MultipartFile file) {
return ResponseEntity.ok(someService.process(file));
}
假设我的服务器有 64GB 的 RAM。如果在短时间内(足够短,process() 方法仍然为每个上传的文件运行),1000 个用户决定上传 100MB 文件(或仅 1用户同时上传 1000 个文件)?
编辑:澄清一下,我想确保我的应用程序不会崩溃,而是停止接受/延迟新请求。
【问题讨论】:
-
您无需停止接受新请求。您只需要更有效地阅读文件。按照我在回答中的建议实施 BufferedReader 会更容易且对用户更友好。
-
这看起来很酷,但是如果我需要一次将整个文件读入内存怎么办(例如,如果我需要验证校验和)?
-
处理大文件不再像以前那样是个大问题,有很多解决方案。例如计算校验和(我编辑了我的答案以添加链接):docs.oracle.com/javase/7/docs/api/java/security/…
标签: java spring file upload out-of-memory