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参数是否对应一致。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SpringBoot项目中使用MultipartFile上传文件,可以按照以下步骤: 1. 在前端页面中添加文件上传表单,例如: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">上传</button> </form> ``` 2. 在后端Controller中添加文件上传处理方法,例如: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return "上传失败,请选择文件"; } try { // 获取文件名 String fileName = file.getOriginalFilename(); // 获取文件的字节数组 byte[] bytes = file.getBytes(); // TODO: 保存文件到指定位置 return "上传成功"; } catch (IOException e) { e.printStackTrace(); return "上传失败:" + e.getMessage(); } } ``` 在上面的代码中,我们首先检查上传的文件是否为空,然后获取文件名和文件的字节数组,并将其保存到指定位置。请注意,由于我们使用了`enctype="multipart/form-data"`,因此必须使用`@RequestParam`注解来获取文件参数。 3. 在SpringBoot的`application.properties`文件中配置文件上传的最大限制大小,例如: ```properties spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 在上面的配置中,我们将文件上传的最大限制大小设置为10MB。如果上传的文件大小超过了这个限制,将会抛出`MaxUploadSizeExceededException`异常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值