01_文件上传

一、前端发送请求

前端向后端发送请求,上传附件。Post请求体中是二进制流,后端接口接收请求并封装成MultipartFile实例。通过接口方法把流对象存储到硬盘上。

1.1、前端代码

    <!-- 上传开始
    :show-file-list 是否展示已上传文件列表
    on-success	文件上传成功时的钩子
    inline-block则是“行内块级元素”,它具有行内元素的特征(即不会自动换行)
    -->
    <div>
      <el-upload
          action="http://localhost:9090/file/upload/"
          :on-success="handsuccess"
          style="display: inline-block"
          :show-file-list="true">
        <el-button size="small" type="primary">点击上传</el-button>
      </el-upload>
    </div>

1.2、代码说明

说明:当show-file-list属性为true时,上传附件后显示文件。

二、后端接收请求

2.1、后端接口

    /**
     * 文件上传接口
     */
   
    //MultipartFile是SpringMVC提供简化文件流操作的接口
    // produces,判断请求头中的accept是否包含指定的格式, 如果有就走该映射
    @PostMapping(value = "/upload",produces = "application/json;charset-UTF-8")
    public String upload(@RequestParam MultipartFile file) throws IOException {
        System.out.println("fileUploadPath值"+fileUploadPath);
        //1 此处不知道为啥用RequestParam接收,因为这个注解应该只从请求头获取数据?
        // 1 获取上传文件的名称,来源SpringMVC提供的MultipartFile
        String originalFilename = file.getOriginalFilename();
        System.out.println(originalFilename);
        //2 FileNameUtil.extName(FileUtil.file(文件名)):获取文件后缀格式,比如pdf,来源hutool
        String type = FileNameUtil.extName(FileUtil.file(originalFilename));
        //获取上传文件的长度
        Long size = file.getSize();//单位是字节
        System.out.println(size);
        //3 UUID全称通用唯一识别码,hutool
        String uuid = IdUtil.fastSimpleUUID();
        // // 定义一个文件唯一的标识码fileUUid(即新文件名)=uuid +. +文件类型
        String fileUUID = uuid + StrUtil.DOT + type;//ad2a8785be4e468ca2fde7d8d5a4e765.jpeg
        System.out.println(fileUploadPath);
        //4 创建一个文件对象,构造方法就是文件的绝对路径(fileUploadPath+fileUploadPath)
        System.out.println(fileUploadPath + fileUUID);
        File uploadFile = new File(fileUploadPath + fileUUID);
        //5 判断文件所在的目录是否存在,注意不是文件是否存在
        File parentFile = uploadFile.getParentFile();
        boolean b1 = parentFile.exists();// b1=true,文件所在的目录存在
        if (b1 = false) {
            //创建目录
            parentFile.mkdir();
        }
        System.out.println(b1);
         上传文件到磁盘,MultipartFile方法,transferTo方法用来将接收文件传输到给定目标路径
        file.transferTo(uploadFile);
        url = "http://localhost:9090/file/"+fileUUID;
        // 上传完附件,把上传的附件的有关信息,保存到数据中
        //创建实体类对象
         Files savaFile = new Files();
         savaFile.setName(originalFilename);//文件名称
         savaFile.setMd5(md5);// 文件md5
         savaFile.setSize(size / 1024);// 文件长度,单位M
         savaFile.setType(type);// 文件类型
         savaFile.setUrl(url);
         filesService.insertFiles(savaFile);
        }
        return "他日若得凌云志,敢笑黄巢不丈夫";
    }

在这里插入图片描述

  //该参数配置在yml文件中为你要存储文件的磁盘路径
    @Value("${files.upload.path}")
    private String fileUploadPath;

2.2、代码说明

1、MultipartFile接口

MultipartFile接口是SpringMVC提供简化文件流操作的接口,相当于一个输入流。接口内包含获取MultipartFile实例的名称,把实例转成字节数据等方法。

2、@RequestParam注解

前端向后端传二进制流,后端接收数据并封装成MultipartFile实例。这是一个Post请求,为什么可以用@RequestParam。@RequestParam可以接收Post请求的参数?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值