SpringBoot + 文件上传 OOM 防护:大文件直接读内存?我们用流式处理防崩溃。
一、文件上传 OOM 的痛点 上个月,我的一个电商系统客户遇到了严重的生产事故:系统在处理用户上传的商品图片时,突然出现了 OOM(内存溢出)崩溃。 "我们的系统每天都要处理大量的图片上传,"客户焦急地说,"昨天有用户上传了几个 100MB 以上的大文件,直接导致服务器内存溢出,整个服务都崩溃了。" 我查看了他们的代码,发现问题确实很严重: 使用了 Spring Boot 默认的文件上传配置 上传的文件直接存储在内存中 没有对文件大小进行合理限制 没有使用流式处理,而是一次性读取整个文件 系统内存只有 4GB,根本无法处理大文件 更关键的是,他们根本不知道有多少用户正在上传大文件,也无法及时发现和处理这种内存风险。 二、传统方案的局限性 1. 默认配置上传 使用 Spring Boot 默认的文件上传配置。 @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { byte[] bytes = file.getBytes();....