springboot项目上传文件MultipartFile空指针问题

今天在写demo的时候,发现文件上传时抛了空指针异常

网上试了很多种办法,比如新建config类、禁用自带MultipartResolver之类的方法都没解决。

网页接口:

<form th:action="@{/file/upload}" method="post" >
<input type="file" name="uploadFile">
<input type="submit" value="上传文件">
</form>

controller方法:

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile uploadFile, HttpSession session) throws IOException {
//获取用户id
User user = (User)session.getAttribute("user");
Integer userId = user.getId();
//获取文件的原始名称
String oldFileName = uploadFile.getOriginalFilename();
-----
}

后来我仔细看了网页端的接口,发现没有加上enctype属性,应该加上 enctype="multipart/form-data" 遂改成如下

<form th:action="@{/file/upload}" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile">
<input type="submit" value="上传文件">
</form>

此时不报空指针异常了,而是抛出:

The current request is not a multipart request

这是一个参数没绑定的问题

发现我在controller的参数列表里写了@RequestParam("file"),此处应该与form表单input标签的name属性一致,所以改成 @RequestParam("uploadFile") 或者不写注解

@PostMapping("/upload")
public String upload(MultipartFile uploadFile, HttpSession session) throws IOException {
//获取用户id
User user = (User)session.getAttribute("user");
Integer userId = user.getId();
//获取文件的原始名称
String oldFileName = uploadFile.getOriginalFilename();
-----
}

总结:报空指针异常时,一般是没有对文件表单加上 enctype="multipart/form-data" ,而当出现参数绑定问题是,就去检查下网页接口和controller参数是否对应一致。

posted @   konley  阅读(547)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示