Spring boot MultipartResolver
【参考文章】:Required MultipartFile parameter 'file' is not present
【参考文章】:Springboot2.0 中 WebMvcConfigurerAdapter 过时问题处理
【参考文章】:spring boot EnableAutoConfiguration exclude 无效
实现了 MultipartResolver 常用接口有两个:
一个是 CommonsMultipartResolver:使用 Jakarta Commons FileUpload 解析 multipart 请求;
一个是 StandardServletMultipartResolver:依赖于 Servlet 3.0 解析 multipart 请求;
1. StandardServletMultipartResolver
Spring boot 默认使用 StandardServletMultipartResolver 解析 multipart 请求;
@Configuration @ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class }) @ConditionalOnProperty(prefix = "spring.servlet.multipart", name = "enabled", matchIfMissing = true) @ConditionalOnWebApplication(type = Type.SERVLET) @EnableConfigurationProperties(MultipartProperties.class) public class MultipartAutoConfiguration {</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> MultipartProperties multipartProperties; </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MultipartAutoConfiguration(MultipartProperties multipartProperties) { </span><span style="color: rgba(0, 0, 255, 1)">this</span>.multipartProperties =<span style="color: rgba(0, 0, 0, 1)"> multipartProperties; } @Bean @ConditionalOnMissingBean({ MultipartConfigElement.</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">, CommonsMultipartResolver.</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> }) </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MultipartConfigElement multipartConfigElement() { </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.multipartProperties.createMultipartConfig(); } @Bean(name </span>=<span style="color: rgba(0, 0, 0, 1)"> DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) @ConditionalOnMissingBean(MultipartResolver.</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">) </span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> StandardServletMultipartResolver multipartResolver() { StandardServletMultipartResolver multipartResolver </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> StandardServletMultipartResolver(); multipartResolver.setResolveLazily(</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.multipartProperties.isResolveLazily()); </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> multipartResolver; }
}
2. CommonsMultipartResolver
2.1 排除默认配置
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
2.2 添加 CommonsMultipartResolver 的依赖
<!--文件上传--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
2.3 创建文件解析对象
@Slf4j
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
<span style="color: rgba(255, 0, 0, 1)">@Bean(name </span></span><span style="color: rgba(255, 0, 0, 1)">= "multipartResolver")
</span><span style="color: rgba(0, 0, 255, 1)">public </span><span style="color: rgba(0, 0, 0, 1)">MultipartResolver multipartResolver() {
log.info(</span>"Loading the multipart resolver"<span style="color: rgba(0, 0, 0, 1)">);
CommonsMultipartResolver multipartResolver </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> CommonsMultipartResolver();
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> multipartResolver;
}
}