在日常开发中,文件下载往往是从小文件(几 KB 的 PDF、几 MB 的 Excel)开始的。但随着业务扩展,当文件规格膨胀到数 GB 甚至 10GB 时,原有的简单实现不仅会引发 JVM OOM(内存溢出),还会让用户在网络波动时反复从 0% 重新下载。 本文梳理大文件下载的三代代码演进、Spring MVC 原生 Range 机制的避坑指南,以及生产级方案的架构考量。 1. 代码演进史 V1:内存全量加载(埋雷写法) @GetMapping("/files/{id}/download") public Resp…