Spring Boot WebFlux如何设置FilePart类型文件上传的最大大小限制
WebFlux Mono上传限制文件大小无第三方依赖解决方案
原有方案失效原因
- 你配置的
spring.servlet.multipart是Spring MVC(Servlet技术栈)的专属配置,不适用于WebFlux响应式栈,所以完全不会生效 SynchronossPartHttpMessageReader是旧版WebFlux的可选解析实现,本身依赖第三方组件,未引入依赖自然会抛出类找不到异常
最优解决方案:直接使用WebFlux专属配置(零代码、无第三方依赖)
Spring Boot 2.4+ 已经默认使用Spring内置的DefaultPartHttpMessageReader处理文件上传,无需任何额外依赖,直接在配置文件中添加以下参数即可生效:
# 单个文件最大大小 spring.webflux.multipart.max-file-size=30KB # 整个请求最大大小 spring.webflux.multipart.max-request-size=30KB # 内存缓存阈值,超过该大小的文件会落盘临时存储 spring.webflux.multipart.max-in-memory-size=30KB
该方案是Spring官方原生支持的,不需要编写任何自定义配置类,也不需要引入第三方包,完全满足常规的文件上传限制需求。
备用方案:自定义Http消息编解码器(适合有复杂定制需求的场景)
如果你需要更灵活的控制(比如限制上传文件数量、自定义临时文件落盘路径等),可以直接使用内置的DefaultPartHttpMessageReader替换原有Synchronoss实现,不需要引入第三方依赖,配置类示例如下:
import org.springframework.util.unit.DataSize; import org.springframework.http.codec.multipart.DefaultPartHttpMessageReader; import org.springframework.http.codec.multipart.MultipartHttpMessageReader; @Configuration @EnableWebFlux public class WebConfiguration implements WebFluxConfigurer { @Override public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) { DefaultPartHttpMessageReader partReader = new DefaultPartHttpMessageReader(); // 单个文件最大大小 partReader.setMaxPartSize(DataSize.ofKilobytes(30)); // 最大允许的文件数量 partReader.setMaxParts(1); // 内存缓存阈值 partReader.setMaxInMemorySize(30 * 1024); partReader.setEnableLoggingRequestDetails(true); MultipartHttpMessageReader multipartReader = new MultipartHttpMessageReader(partReader); multipartReader.setEnableLoggingRequestDetails(true); configurer.defaultCodecs().multipartReader(multipartReader); } }
内容的提问来源于stack exchange,提问作者Joseph Freeman
相关产品推荐
相关产品推荐

