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

Spring Boot Multipart文件上传报500内部服务器错误求助

解决Spring Boot Multipart文件上传500错误

问题描述

基于Maven构建的Spring Boot项目,实现文件上传接口时调用出现500 Internal Server Error。

错误信息

Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided

原因分析

  • 配置冲突:手动配置了Spring MVC的CommonsMultipartResolver,但Spring Boot默认使用StandardServletMultipartResolver,两者冲突导致Multipart配置未正确加载。
  • 依赖冗余:pom.xml同时引入spring-webmvc和spring-boot-starter-web,后者已包含spring-webmvc,重复引入引发依赖混乱。
  • 启动配置缺失:war打包的Spring Boot项目未正确继承SpringBootServletInitializer,导致容器无法识别Spring Boot的自动配置,包括Multipart配置。

解决方案

1. 清理冗余依赖

修改pom.xml,移除以下不必要的依赖:

<!-- 移除重复的spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.21.RELEASE</version>
</dependency>
<!-- 移除commons-fileupload和commons-io,Spring Boot默认不需要 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

2. 删除自定义MultipartResolver配置

修改SpringApplicationConfig.java,移除multipartResolver Bean的定义,让Spring Boot自动配置:

package awsarTest.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@ComponentScan(basePackages = "awsarTest.controller")
@Configuration
@EnableWebMvc
public class SpringApplicationConfig {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver vw = new InternalResourceViewResolver();
        vw.setPrefix("/WEB-INF/jsp/");
        vw.setSuffix(".jsp");
        return vw;
    }

    // 移除下面的multipartResolver Bean
}

3. 添加Spring Boot启动类

如果项目没有启动类,创建一个继承SpringBootServletInitializer的启动类,适配war打包:

package awsarTest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class AwsarTestApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(AwsarTestApplication.class, args);
    }
}

4. 保留Multipart配置

application.properties中的Multipart配置可以继续使用,Spring Boot会自动读取并应用:

# MULTIPART (MultipartProperties)
# Enable multipart uploads
spring.servlet.multipart.enabled=true
# Threshold after which files are written to disk.
spring.servlet.multipart.file-size-threshold=2KB
# Max file size.
spring.servlet.multipart.max-file-size=200MB
# Max Request Size
spring.servlet.multipart.max-request-size=215MB

5. 验证Controller代码

确保Controller的上传方法参数正确,可修正方法名拼写(非必须,但更规范):

@PostMapping(value = "/upload")
public String uploadDocument(@RequestParam("file") MultipartFile file) {
    String fileName = file.getOriginalFilename();
    System.out.println("Received file: " + fileName);        
    return fileName;
}

测试

重新打包部署项目,使用Postman调用接口http://localhost:6061/awsarTest/auth/upload,确保请求的Content-Type设置为multipart/form-data,并正确选择文件后发送请求。

内容的提问来源于stack exchange,提问作者Arunraj Chandran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:07:33