multipartResolver上傳文件配置
1、gradle配置
1
2
|
compile ( 'commons-io:commons-io:1.4' ) compile( 'commons-fileupload:commons-fileupload:1.2.1' ) |
2、注冊(cè)Bean
1
2
3
4
5
6
7
8
9
10
11
|
@Bean (name = "multipartResolver" ) public MultipartResolver multipartResolver(){ CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding( "UTF-8" ); //resolveLazily屬性啟用是為了推遲文件解析,以在在UploadAction中捕獲文件大小異常 resolver.setResolveLazily( true ); resolver.setMaxInMemorySize( 40960 ); //上傳文件大小 50M 50*1024*1024 resolver.setMaxUploadSize( 50 * 1024 * 1024 ); return resolver; } |
SpringBoot MultipartResolver的坑
在使用springBoot上傳文件的時(shí)候,我們會(huì)用到MultipartResolver。我看通過(guò)源碼可以看到
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@Configuration @ConditionalOnClass ({ Servlet. class , StandardServletMultipartResolver. class , MultipartConfigElement. class }) @ConditionalOnProperty (prefix = "spring.http.multipart" , name = "enabled" , matchIfMissing = true ) @EnableConfigurationProperties (MultipartProperties. class ) public class MultipartAutoConfiguration { private final MultipartProperties multipartProperties; public MultipartAutoConfiguration(MultipartProperties multipartProperties) { this .multipartProperties = multipartProperties; } @Bean @ConditionalOnMissingBean ({ MultipartConfigElement. class , CommonsMultipartResolver. class }) public MultipartConfigElement multipartConfigElement() { return this .multipartProperties.createMultipartConfig(); } @Bean (name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) @ConditionalOnMissingBean (MultipartResolver. class ) public StandardServletMultipartResolver multipartResolver() { StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver(); multipartResolver.setResolveLazily( this .multipartProperties.isResolveLazily()); return multipartResolver; } |
可以看出MultipartAutoConfiguration配置類(lèi),默認(rèn)加載的是StandardServletMultipartResolver。
然而,我們往往會(huì)在項(xiàng)目中加入commons-fileupload依賴,加載的是CommonsMultipartResolver。此時(shí)同時(shí)使用兩個(gè),會(huì)產(chǎn)生沖突。
解決方案
1、使用SpringBoot 默認(rèn)的StandardServletMultipartResolver,不依賴commons-fileupload。
2、使用commons-fileupload的CommonsMultipartResolver,
排除默認(rèn)
1
2
3
|
spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration |
自定義文件解析對(duì)象
1
2
3
4
5
6
|
@Bean (name = "multipartResolver" ) public MultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding( "UTF-8" ); return resolver; } |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/u011110968/article/details/82856736