[WARNING] Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'myFile' is not present]已解决+1
Required request part 'myFile' is not present
所需的请求部分“myFile”不存在
开发环境:Java,Maven,Spring
问题描述:我仔细的盯着前端编写的表单还有后端接收的参数后,发现我并没有写错参数名称,按道理应该可以获取到所谓的“myFile”参数。问题相关代码如下:
</form>
<h1>文件上传</h1>
<form action="/file/upload.demo" method="post" enctype="multipart/form-data">
请选择文件:<input type="file" name="myFile"/><br>
<button type="submit">上传文件</button>
</form>
@Controller
@RequestMapping("file")
public class FileUploadController {
@RequestMapping(value = "upload.demo",method = RequestMethod.POST)
public String upload(@RequestParam("myFile") MultipartFile file, HttpServletRequest req) throws IOException {
String originalFilename = file.getOriginalFilename();
System.out.println("originalFilename = " + originalFilename);
String randomPrefix = UUID.randomUUID().toString().replace("-", "");
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String dirPath = req.getServletContext().getRealPath("/upload-files");
String savePath = dirPath + "\\" + randomPrefix + suffix;
//文件存储到服务器
file.transferTo(new File(savePath));
System.out.println("upload success ! savePath = " + savePath);
return "jsp-view/ok";
}
}
于是上网查找了相关问题,有人说用spring boot不要在容器配置文件中声明CommonsMultipartResolver的bean实例。
结合我自己的情况,我使用的是spring mvc,确实在容器中声明了这个对象
<bean id="commonsMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
- 于是我直接注释掉了这个bean重新启动项目,发现报错没有改变
思考了一下最终解决了,问题还是出在这个bean上
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
把id改为multipartResolver后就可以!
推测原因是spring mvc是自动调用名为multipartResolver的对象,所以必须使用这个名称。
至于为什么起这个名称大概是因为容器是按照MultipartResolver这个接口来调用此对象的。
目前初学spring所以不想看源码,如果有知道的朋友可以告诉我鸭~