[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所以不想看源码,如果有知道的朋友可以告诉我鸭~

posted @ 2021-04-23 09:13  呆炜  阅读(3081)  评论(0编辑  收藏  举报