向Java Spring上传含文本与文件的表单失败,报Multipart请求异常
解决Spring后端接收FormData时的"Current request is not a multipart request"异常
这个问题我之前帮很多开发者排查过,核心问题出在GET请求不支持multipart/form-data类型的请求体,再结合你的代码细节,我帮你拆解错误并给出修正方案:
错误原因拆解
- 请求方法选择错误:GET请求的参数是通过URL传递的,不会携带请求体(request body),而
multipart/form-data格式的数据(包含文件)必须通过请求体传递,所以无论前端怎么设置enctype,GET请求都无法把FormData传给后端。你HTML表单的method="get"和AJAX的type:'get'都是错误的。 - 后端请求方法不匹配:你的Spring接口用了
RequestMethod.GET,和前端实际需要的POST请求不匹配,导致后端无法识别multipart请求。
修正后的代码
1. HTML代码(修改form的method为post)
<form id="creationForm" method="post" enctype="multipart/form-data"> <input id="testName" class="form-control" name="testName"> <input type="file" name="fileUpload" id="fileUpload"/> </form>
2. JavaScript代码(修改请求类型为post,简化FormData处理)
$(document).ready(function () { $('#btnSubmit').click(function (e) { e.preventDefault(); var formData = new FormData(document.getElementById('creationForm')); // 无需单独存储文件,FormData会自动获取表单内的文件和输入值 $.ajax({ type: 'post', // 改为POST请求 url: '/upload/testCase', data: formData, enctype: 'multipart/form-data', processData: false, contentType: false, success: function (result) { console.log("上传成功"); }, error: function (xhr) { console.log("上传失败:" + xhr.responseText); } }); }); });
3. Java代码(修改请求方法为POST,可同时接收文本参数)
@RequestMapping(value = "/upload/testCase", method = RequestMethod.POST) public @ResponseBody void uploadTestCase( @RequestParam("testName") String testName, @RequestParam("fileUpload") MultipartFile file ) { System.out.println("接收的测试名称:" + testName); System.out.println("接收的文件:" + file.getOriginalFilename()); // TestCases.upload(file); }
4. Spring XML配置(你的配置本身没问题,确保依赖正确即可)
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
额外注意事项
- 确保项目引入
commons-fileupload依赖(Maven项目可在pom.xml中添加):
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> <!-- 使用最新稳定版 --> </dependency>
CommonsMultipartResolver的Bean id必须为multipartResolver,Spring会自动识别该id的Bean来处理multipart请求。
内容的提问来源于stack exchange,提问作者user9176898
相关产品推荐
相关产品推荐

