文件上传-获取时长

在SpringBoot项目中,为满足需求,通过fasdf文件服务器进行文件上传,并利用音视频解析工具读取视频文件的时长。
摘要由CSDN通过智能技术生成

1、接到需求需要后台再文件上传中读取视频时长

  • 技术:springBoot fasdf文件服务器
    引入音视频解析工具依赖
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-all-deps</artifactId>
            <version>2.5.1</version>
        </dependency>
   /**
     * 普通文件上传
     *
     * @return
     */
    public Result uploadFile(MultipartFile file, String source, String resultType) {

        String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String relative_path = today + "/";
        String path = filePath + "/" + relative_path;

        if (file.isEmpty()) {
            return new Result(500, "文件为空!");
        }
        //文件名
        String fileName = file.getOriginalFilename();
        // 后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //新文件名
        String uuidName = UUID.randomUUID().toString().replace("-", "");
        String newfileName = uuidName + suffixName;
        FileEntity entity = new FileEntity();
        File orginFile = new File(path + newfileName);

        try {
            if (!orginFile.getParentFile().exists()) {
                orginFile.getParentFile().mkdirs();
            }
            file.transferTo(orginFile);
        } catch (IOException e) {
            log.info(e.getMessage(), e);
        }
        entity.setDuration(this.ReadVideoTime(path + newfileName));
        entity.setFileName(newfileName);
        entity.setOrgName(fileName);
        entity.setFilePath(relative_path + newfileName);
        entity.setSource(source);
        entity.setSize(file.getSize());
        entity.setSuffix(suffixName);

        baseMapper.insert(entity);

        VO vo = new VO();
        vo.setName(fileName);
        vo.setSize(file.getSize());
        vo.setDuration(entity.getDuration());
        vo.setSuffix(suffixName);
        vo.setOrgName(fileName);
        if ("name".equals(resultType)) {
            vo.setResult(uuidName);
        } else {
            vo.setResult(relative_path + newfileName);
        }
        return Result.success(vo);
    }

方法

public String ReadVideoTime(String FileUrl) {
        File source = new File(FileUrl);
        String length = "";
        long ls = 0L;
        try {
            MultimediaObject instance = new MultimediaObject(source);
            MultimediaInfo result = instance.getInfo();
            ls = result.getDuration();
        } catch (Exception e) {
            log.info("获取视频时长失败,{}", e.getMessage());
            return length;
        }
        return getDurationDetails(ls);
    }

    public static String getDurationDetails(long ms) {
        int ss = 1000;
        int mi = ss * 60;
        int hh = mi * 60;
        int dd = hh * 24;

        long day = ms / dd;
        long hour = (ms - day * dd) / hh;
        long minute = (ms - day * dd - hour * hh) / mi;
        long second = (ms - day * dd - hour * hh - minute * mi) / ss;
        //小时
        String strHour = hour < 10 ? "0" + hour : "" + hour;
        //分钟
        String strMinute = minute < 10 ? "0" + minute : "" + minute;
        //秒
        String strSecond = second < 10 ? "0" + second : "" + second;
        if (strHour.equals("00")) {
            return strMinute + ":" + strSecond;
        } else {
            return strHour + ":" + strMinute + ":" + strSecond;
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值