網站首頁 編程語言 正文
request doesn‘t contain a multipart/form-data or multipart/form-data stream, content type header解決
作者:Mark_MMXIX 更新時間: 2022-03-15 編程語言錯誤
當工程升級到SpringBoot2.1使用ServletFileUpload獲取Request里面文件報錯如下:
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里自動裝配了MultipartResolver
MultipartResolver
來自
org.springframework.web.multipart
包下的MultipartResolver
提供解析包括文件上傳在內的多部分請求策略。一種實現方式是基于Commons FileUpload
,另外則基于Servlet 3.0
的多部分請求解析。
啟用多部分處理,需要在
DispatcherServlet
Spring配置中聲明一個名為multipartResolver
的MultipartResolver
bean。DispatcherServlet
檢測到它并將其應用于傳入的請求。當接收到一個content-type
是multipart/form-data
的POST請求時,解析程序將解析內容并將當前HttpServletRequest
包裝為MultipartHttpServletRequest
,以提供對已解析部分的訪問權限,此外將其作為請求參數公開。
而裝配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配置類,默認加載的是StandardServletMultipartResolver
。
然而,我們往往會在項目中加入commons-fileupload
依賴,加載的是CommonsMultipartResolver。此時同時使用兩個,會產生沖突
。
解決
1. 啟動類排除
在啟動類排除配置
@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})
2. 配置文件禁用
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
3. 自定義文件解析對象
@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
相關推薦
- 2022-11-03 ahooks?useVirtualList?封裝虛擬滾動列表_React
- 2022-05-20 python?使用turtle實現實時鐘表并生成exe_python
- 2022-10-05 Python實現單例模式的五種寫法總結_python
- 2022-02-23 Proxy error Could not proxy request錯誤解決
- 2022-08-06 QT生成隨機驗證碼的方法_C 語言
- 2022-10-14 yum-config-manager 命令找不到的解決方法
- 2023-10-13 獲取element-ui的Collapse折疊后高度
- 2023-12-10 啟動微服務,提示驅動程序無法通過使用安全套接字層(SSL)加密與 SQL Server 建立安全連接
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支