解决 SpringMVC 文件下载时 参数传递MultipartFile为null的情况 对你学习SpingMVC 有帮助

遇到问题的原因

1.客户端未正确发送文件数据:在进行文件上传时,客户端需要以正确的方式发送文件数据。请确保客户端代码中设置了正确的 enctype 属性为 "multipart/form-data",并且将文件数据正确地包装成 multipart/form-data 格式。

2.请求参数名不匹配:请确保前端表单中的文件上传字段的名称与后端接口方法中的参数名 multipartFile 一致。如果名称不一致,multipartFile 参数将无法接收到文件数据。

3.文件大小超过限制:如果上传的文件大小超过了服务器端所允许的最大限制,那么 multipartFile 参数可能会为空。你可以检查服务器端的配置,确认是否设置了适当的文件大小上线

HTML代码

<form action="file/upload" method="post" enctype="multipart/form-data">
    文件上传:: <input type="file" name="files"><br>
    <button type="submit">开始上传</button>
</form>

Java 后端代码 

@PostMapping("/upload")
public String uploadFile(MultipartFile file) throws IOException {
    //实现类为class org.springframework.web.multipart.commons.CommonsMultipartFile
    /*
     * 具体的实现类 为CommonsMultipartFile
     *
     * */
    System.out.println("实现类为" + file.getClass());
    //获取上传文件的名称
    String filename = file.getOriginalFilename();
    //往磁盘里进行存储  并准备磁盘的名称
    String filepath = "D:/mywebapps/download/";
    //根据其日期为其分类
    String formatPath = new SimpleDateFormat("yyyy/MM/dd/").format(new Date());
    String path = filepath + formatPath;
    //进行判断  如果 不存在就创建 如果存在就不创建   file  其含义为创建文件夹对象
    File dirFile = new File(path);
    if (!dirFile.exists()) {
        dirFile.mkdirs();
    }
    String uuid = UUID.randomUUID().toString();
    //substring  从 最右边一个.开始到最后结尾
    String type = filename.substring(filename.lastIndexOf("."));
    //获取
    String endname = uuid + type;
    //准备上传文件的路径
    String realpath = path + endname;
    File finalFile = new File(realpath);
    if (!finalFile.exists()) {
        file.transferTo(finalFile);
    }
    //  上传完毕 重定向到首页
    return "redirect:/";

}

解决方式

文件上传:: <input type="file" name="files"><br>

public String uploadFile(@RequestParam(value = "files") MultipartFile filem) throws IOException {  
  其中的标签中name的属性和形参名要一一对应, 不对应的化会出现 MultipartFile 的情况   
  解决办法
 1.  修改形参中的参数名
 2 是可以根据@RequestParam 来修改参数的名称
 (@RequestParam(value = "files") MultipartFile filem)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值