Element ui + SpringBoot MultipartFile类实现文件上传

目的

将前端上传的文件保存到服务器,返回给前端文件在服务器的路径保存至数据库。

前端代码

<el-upload
        name="file"
        class="upload-demo"
        drag
        action="http://localhost:8081/media/fileupload/"
        :on-success="uploadSuccess"
        :on-error="error"
        multiple>
    <i class="el-icon-upload"></i>
    <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
    <div class="el-upload__tip" slot="tip">文件大小不超过100mb,多文件上传请压缩</div>
</el-upload>

在这里插入图片描述

后端Java代码

简单逻辑就是将SpringMvc的MultipartFile类转换为JDK的File类
要注意MultipartFile.getName()返回的是前端组件的name属性,也就是@RequestParam(“file”)注解中的“file"。getOriginalFilename()才是获得上传文件的名字

@PostMapping("/fileupload")
    public Result fileUpload(@RequestParam("file") MultipartFile file){
        String filename = file.getOriginalFilename();//获得文件原名 如:abc.txt
        log.info("开始上传文件====>{}", filename);
        String filePath = "E:/saving/";//存放目标文件的上一层路径
        File f = new File(filePath);
        //若不存在 E:/saving/ 则获取这个文件夹的父文件夹创建出 E:/saving/
        if (!f.exists()){
            f.getParentFile().mkdir();
        }
        //将要被储存的对象 E:/saving/abc.txt
        File target = new File(f.getAbsolutePath() +'/' + filename);
        //目标文件如果已经存在说明文件重名了,需要另起一个唯一的名字
        if (target.exists()){
            int i = filename.lastIndexOf('.');
            String originName = filename.substring(0, i);//文件名字 abc
            String suffix = filename.substring(i, filename.length()); //文件后缀 .txt
            target = new File(f.getAbsolutePath() +'/' + originName + UUID.randomUUID() + suffix);
        }
        //创建目标文件夹,此时目标文件肯定不存在
        target.getParentFile().mkdir();
        try {//储存过程
            file.transferTo(target);
            //返回目标文件的绝对路径
            return Result.success(target.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Result.fail("上传失败");
    }

上传结果

在这里插入图片描述
在这里插入图片描述
这样子上传两个同名的文件就不会出现被覆盖的情况了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值