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

Spring MVC Ajax图片上传报错:Unable to process parts as no multi-part configuration has been provided

解决Spring MVC Ajax文件上传报错"Unable to process parts as no multi-part configuration has been provided"

核心问题分析

你使用的StandardServletMultipartResolver依赖Servlet容器的multipart配置,但当前项目未在Servlet层面配置文件上传相关参数,导致容器无法处理multipart请求。此外,pom.xml中存在Servlet API依赖冲突,也可能引发问题。

分步解决方案

1. 修复pom.xml依赖冲突

Spring 6.x基于Jakarta EE 9+,需移除javax.servlet-api依赖,保留jakarta.servlet-api即可:

<!-- 删除以下依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

2. 解决Multipart配置问题(二选一)

方案一:配置Servlet容器的Multipart参数(适用于StandardServletMultipartResolver)

在web.xml中为Spring MVC的DispatcherServlet添加<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/servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!-- 添加multipart配置 -->
    <multipart-config>
        <max-file-size>10485760</max-file-size> <!-- 10MB -->
        <max-request-size>20971520</max-request-size> <!-- 20MB -->
        <file-size-threshold>0</file-size-threshold>
    </multipart-config>
</servlet>

方案二:切换为CommonsMultipartResolver(无需Servlet容器配置)

由于你已引入commons-fileupload依赖,可将servlet.xml中的multipartResolver替换为CommonsMultipartResolver:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 可选:设置最大上传文件大小 -->
    <property name="maxUploadSize" value="10485760"/> <!-- 10MB -->
</bean>

3. 优化后端Controller代码(可选)

可以直接通过@RequestParam接收文件,代码更简洁:

@Controller
@RequestMapping("api/")
public class APIController {
    @Autowired
    ServletContext servletContext;
    
    @PostMapping("uploadfile")
    @ResponseBody
    public String upLoadFile(@RequestParam("file") MultipartFile file) {
        String pathToProducts = servletContext.getRealPath("/resources/Image/");
        File saveDir = new File(pathToProducts);
        // 确保目录存在
        if (!saveDir.exists()) {
            saveDir.mkdirs();
        }
        File fileSave = new File(pathToProducts + File.separator + file.getOriginalFilename());
        try {
            file.transferTo(fileSave);
        } catch (IOException e) {
            e.printStackTrace();
            return "上传失败";
        }
        return "上传成功";
    }
}

4. 前端代码优化(可选)

变量声明使用let/const避免全局变量污染:

$(document).ready(function(){
    $("#productPhotos").change(function(event){
        const files = event.target.files;
        const formData = new FormData();
        formData.append("file", files[0]);
        
        $.ajax({
            url: "/shophai/api/uploadfile",
            type: "POST",
            data: formData,
            contentType: false,
            processData: false,
            success: function (value) { 
                console.log("上传结果:", value);
            },
            error: function(xhr) {
                console.error("上传失败:", xhr.responseText);
            }
        })
    });
});

内容的提问来源于stack exchange,提问作者do hai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:19:56