Spring MVC 6.0.6文件上传报错:未提供多部分配置如何解决?
Spring MVC 6.0.6 文件上传报错
Unable to process parts as no multi-part configuration has been provided 解决办法 核心原因
这个错误本质是Tomcat未检测到处理请求的DispatcherServlet带有Multipart配置——即便你在Controller或配置类上加了@MultipartConfig,但该注解是Servlet规范注解,必须直接作用于Servlet类(此处即DispatcherServlet)才能被Tomcat识别。单元测试依赖MockMvc模拟请求,不涉及容器的Multipart处理逻辑,所以不会触发该错误。
解决步骤
1. 给DispatcherServlet添加Multipart配置(编程式注册场景)
如果用Java代码注册DispatcherServlet,直接为其设置MultipartConfigElement:
public class WebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(WebConfig.class); DispatcherServlet dispatcherServlet = new DispatcherServlet(ctx); // 配置Multipart参数,可根据业务需求调整数值 MultipartConfigElement multipartConfig = new MultipartConfigElement( null, // 临时文件存储路径,默认使用Tomcat临时目录 5 * 1024 * 1024, // 单个文件最大限制(5MB) 20 * 1024 * 1024, // 整个请求的文件总大小限制(20MB) 1 * 1024 * 1024 // 文件超过此阈值时写入磁盘(1MB) ); dispatcherServlet.setMultipartConfig(multipartConfig); ServletRegistration.Dynamic reg = servletContext.addServlet("dispatcher", dispatcherServlet); reg.setLoadOnStartup(1); reg.addMapping("/"); } }
2. 验证StandardServletMultipartResolver配置
确保Spring MVC的Multipart解析器配置正确,在Web配置类中:
@Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Bean public StandardServletMultipartResolver multipartResolver() { StandardServletMultipartResolver resolver = new StandardServletMultipartResolver(); // 可选:延迟解析,避免提前处理Multipart请求 resolver.setResolveLazily(true); return resolver; } }
3. web.xml配置场景的处理方式
如果用web.xml注册DispatcherServlet,需在<servlet>标签内添加<multipart-config>节点:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-web-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <!-- 配置Multipart参数 --> <multipart-config> <max-file-size>5242880</max-file-size> <max-request-size>20971520</max-request-size> <file-size-threshold>1048576</file-size-threshold> </multipart-config> </servlet>
验证
重启Tomcat后,用Postman发送multipart/form-data请求到http://127.0.0.1:8080/upload,即可正常处理文件上传,不再返回500错误。
内容的提问来源于stack exchange,提问作者radumanolescu
相关产品推荐
相关产品推荐

