SpringBoot中的multipartResolver上傳文件配置
multipartResolver上傳文件配置
1、gradle配置
compile ('commons-io:commons-io:1.4')
compile('commons-fileupload:commons-fileupload:1.2.1')
2、注冊Bean
@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上傳文件的時候,我們會用到MultipartResolver。我看通過源碼可以看到
@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配置類,默認(rèn)加載的是StandardServletMultipartResolver。
然而,我們往往會在項目中加入commons-fileupload依賴,加載的是CommonsMultipartResolver。此時同時使用兩個,會產(chǎn)生沖突。
解決方案
1、使用SpringBoot 默認(rèn)的StandardServletMultipartResolver,不依賴commons-fileupload。
2、使用commons-fileupload的CommonsMultipartResolver,
排除默認(rèn)
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
自定義文件解析對象
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
return resolver;
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口
這篇文章主要介紹了Springboot單體架構(gòu)http請求轉(zhuǎn)換https請求來支持微信小程序調(diào)用接口,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Java8 String內(nèi)存優(yōu)化之字符串常量池詳解
這篇文章主要介紹了Java8 String內(nèi)存優(yōu)化之字符串常量池,具有很好的參考價值,希望對大家有所幫助,2023-07-07
使用@Transactional 設(shè)置嵌套事務(wù)不回滾
這篇文章主要介紹了使用@Transactional 設(shè)置嵌套事務(wù)不回滾問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot整合RestTemplate用法的實現(xiàn)
本篇主要介紹了RestTemplate中的GET,POST,PUT,DELETE、文件上傳和文件下載6大常用的功能,具有一定的參考價值,感興趣的可以了解一下2023-08-08
Java Runnable線程傳參,實現(xiàn)讓run訪問參數(shù)
這篇文章主要介紹了Java Runnable線程傳參,實現(xiàn)讓run訪問參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringBoot基于數(shù)據(jù)庫的定時任務(wù)統(tǒng)一管理的實現(xiàn)
這篇文章主要介紹了SpringBoot基于數(shù)據(jù)庫的定時任務(wù)統(tǒng)一管理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
解析Java中的隊列和用LinkedList集合模擬隊列的方法
這篇文章主要介紹了解析Java中的隊列和用LinkedList集合模擬隊列的方法,相關(guān)算法的實現(xiàn)也是ACM中的常見題目,需要的朋友可以參考下2015-08-08

