MultipartFile多文件上传

controller多文件上传

  @RequestMapping("upload")
    public Result<OssFile> add(@RequestParam(value = "files") MultipartFile[] files,
                                   @NotNull @NotEmpty(message = "文件夹不能为空") String fileDirId) {
                                   // controller层可以处理一些参数处理,上传文件放service层
                                  
                                  //上传
        ArrayList<OssFile> ossFiles = new ArrayList<>();
        if (files != null && files.length > 0) {
            for (MultipartFile file : files) {
                OssFile ossFile = localOssService.upload(file);
                ossFile.setFileDirId(fileDirId);
                ossFile = ossFileService.save(ossFile);
                //数据库表存储数据
                ossFiles.add(ossFile);
            }
        }
     }

localOssService

 public OssFile upload(MultipartFile file) {
        //服务器路径(附本地测试路径)
//        String staticPath = "C:\\Users\\default.DESKTOP-JOC1TKT\\Desktop\\test\\";
        String staticPath = ClassUtils.getDefaultClassLoader().getResource("").getPath().replaceFirst("/", "");
        try {
          //文件后缀类型
            String type = FileTypeUtil.getType(file.getInputStream());
            //判断类型,自定义文件夹
            String fileType = MimeTypeUtil.imgOrVideo(type);
            //绝对路径(自定义)
            String uploadPath = "";
            if (StrUtil.equals(fileType, FileType.IMAGE.getValue())) {
                uploadPath = "upload/img/";
            } else if (StrUtil.equals(fileType, FileType.VIDEO.getValue())) {
                uploadPath = "upload/video/";
            } else {
                uploadPath = "upload/other";
            }
            //文件原名
            String fileName = file.getOriginalFilename();
            //文件传输过来的映射名,controller层的 value值:@RequestParam(value = "file") MultipartFile file 
            String name = file.getName();
            //后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            //创建文件存放文件夹
            File file1 = new File(staticPath + uploadPath);
            if (!file1.exists()) {
           		 //注意权限问题,没有权限会在后面找不到路径
                file1.mkdir();
            }
            if (fileName != null && !"".equals(fileName.trim())) {
            	//自定义存库的文件名
                String newName = UUID.randomUUID().toString().replace("-", "") + suffixName;
                //创建文件
                File desFile = new File(staticPath + uploadPath + File.separator + newName);
                //将源文件写入服务器
                file.transferTo(desFile);
                //文件全路径
                String fileUrl = staticPath + uploadPath + newName;
                //入库的文件对象
                OssFile ossFile = new OssFile();
                ossFile.setName(fileName);
                ossFile.setMimeType(type);
                ossFile.setFileType(FileType.valueOf(fileType));
                ossFile.setFilename(fileName);
                ossFile.setRealPath(uploadPath + newName);
                ossFile.setUrl(fileUrl);
                if (ObjectUtil.equal(FileType.VIDEO, FileType.valueOf(fileType))) {
                     视频封面,待优化
                    ossFile.setCover("defaultURl");
                }
                return ossFile;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

MultipartFile常用方法

1、文件类型值 getContentType()
2、表单中文件组件对应name值 getName()
3、文件原始名称包括后缀名 getOriginalFilename()
4、文件大小单位为k getSize()
5、文件是否为空 isEmpty()
6、保存到一个目标文件中 transferTo() 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值