You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat文件上传出现FileNotFoundException问题求助

处理Spring Multipart请求控制器异常的常见方案

首先先把你给出的控制器代码格式化一下,方便排查:

@RequestMapping(value = "/{id}/projects", method = RequestMethod.POST, consumes = "multipart/form-data")
public ResponseEntity<Project> addProject(@PathVariable Long id, 
                                          @RequestParam("file") MultipartFile file, 
                                          @ModelAttribute CreateProjectDTO projectDto) 
                                          throws URISyntaxException, ResourceNotFoundException {
    // 无业务逻辑仍抛出异常
}

看到你说即使控制器里没做任何操作也出现异常,但没贴全完整的异常栈信息,我先列几个这类场景下最常遇到的问题和对应的解决办法,你可以对照排查:

1. MultipartResolver未正确配置

Spring默认不会自动注册MultipartResolver(除非是Spring Boot自动配置场景),如果缺少这个bean,容器无法解析multipart/form-data类型的请求,会直接抛出异常。

解决办法:
在你的Spring配置类中显式声明这个bean:

@Bean
public MultipartResolver multipartResolver() {
    return new StandardServletMultipartResolver();
}

如果是用XML配置的话,添加:

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

2. 请求参数与控制器参数不匹配

比如前端传递的文件参数名不是file,或者CreateProjectDTO的字段和前端表单里的参数名不对应,导致参数绑定失败抛出异常。

解决办法:

  • 检查前端表单:确保文件输入框的name属性是file,和@RequestParam("file")的参数名完全一致(注意大小写敏感)。
  • 检查CreateProjectDTO:如果表单里的其他参数和DTO字段名不一致,可以给DTO字段添加@RequestParam指定映射,或者用@JsonProperty(如果是混合JSON的表单请求)。

3. 文件大小超出限制

如果上传的文件超过了Spring或Servlet容器的默认大小阈值,会抛出MaxUploadSizeExceededException相关异常。

解决办法:

Spring Boot项目直接在配置文件设置:

# 单个文件最大大小
spring.servlet.multipart.max-file-size=10MB
# 整个请求的总大小限制
spring.servlet.multipart.max-request-size=50MB

普通Spring MVC项目可以通过配置类设置:

@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setMaxFileSize(DataSize.ofMegabytes(10));
    factory.setMaxRequestSize(DataSize.ofMegabytes(50));
    return factory.createMultipartConfig();
}

4. 缺少Multipart相关依赖

如果是普通Spring MVC项目,要确保spring-web依赖已经正确引入,版本和其他Spring组件保持一致;如果是Spring Boot项目,spring-boot-starter-web已经包含了所需依赖,一般不用额外添加,但如果依赖缺失也会导致解析失败。

如果能把完整的异常栈信息贴出来,我可以更精准地帮你定位问题~

内容的提问来源于stack exchange,提问作者john deer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:38:13