網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
request doesn‘t contain a multipart/form-data or multipart/form-data stream, content type header解決
作者:Mark_MMXIX 更新時(shí)間: 2022-03-15 編程語(yǔ)言錯(cuò)誤
當(dāng)工程升級(jí)到SpringBoot2.1使用ServletFileUpload獲取Request里面文件報(bào)錯(cuò)如下:
org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header is null
原因
首先需要了解的是SpringBoot2里自動(dòng)裝配了MultipartResolver
MultipartResolver
來(lái)自
org.springframework.web.multipart
包下的MultipartResolver
提供解析包括文件上傳在內(nèi)的多部分請(qǐng)求策略。一種實(shí)現(xiàn)方式是基于Commons FileUpload
,另外則基于Servlet 3.0
的多部分請(qǐng)求解析。
啟用多部分處理,需要在
DispatcherServlet
Spring配置中聲明一個(gè)名為multipartResolver
的MultipartResolver
bean。DispatcherServlet
檢測(cè)到它并將其應(yīng)用于傳入的請(qǐng)求。當(dāng)接收到一個(gè)content-type
是multipart/form-data
的POST請(qǐng)求時(shí),解析程序?qū)⒔馕鰞?nèi)容并將當(dāng)前HttpServletRequest
包裝為MultipartHttpServletRequest
,以提供對(duì)已解析部分的訪問(wèn)權(quán)限,此外將其作為請(qǐng)求參數(shù)公開(kāi)。
而裝配MultipartResolver的的配置是MultipartAutoConfiguration
MultipartAutoConfiguration
@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. 啟動(dòng)類(lèi)排除
在啟動(dòng)類(lèi)排除配置
@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})
2. 配置文件禁用
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
3. 自定義文件解析對(duì)象
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
return resolver;
}
原文鏈接:https://blog.csdn.net/qq_28540443/article/details/107367572
相關(guān)推薦
- 2022-09-26 Go常用技能日志log包創(chuàng)建使用示例_Golang
- 2022-08-13 Android開(kāi)發(fā)Viewbinding委托實(shí)例詳解_Android
- 2022-11-16 一文搞懂C++中的運(yùn)算符重載_C 語(yǔ)言
- 2022-05-21 C語(yǔ)言實(shí)現(xiàn)銀行管理系統(tǒng)(文件操作)_C 語(yǔ)言
- 2023-06-16 Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流的實(shí)現(xiàn)_Golang
- 2023-03-26 React性能優(yōu)化的實(shí)現(xiàn)方法詳解_React
- 2022-07-18 properties配置文件解耦合連接數(shù)據(jù)庫(kù)的原理
- 2022-08-13 采用python開(kāi)發(fā)sparkstreming全流程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支