element上传时判断视频\音频时长

html

before-upload上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。

 <el-upload :before-upload="beforeUpload"></el-upload>

js

    async beforeUpload(file) {
      return new Promise((resolve, reject) => {
        //文件验证【后缀名|文件类型、文件大小】应该写在这里。
        //不允许上传同名文件。如果后面改为允许的话,要注意排查删除同名文件的问题【根据名字找文件得改为根据文件id来找文件】。
        let existFile = this.fileList.slice(0, this.fileList.length - 1).find(f => f.name === file.name);
        console.log("beforeUpload file", file);
        if (existFile) {
          resetMessage.error("您上传了同名文件:" + file.name + ",已为您移除。");
          reject()
        }
        let FileExt = file.name.replace(/.+\./, "");
        if (
          ["mp3", "wav", "m4a", "mp4"].indexOf(FileExt.toLowerCase()) === -1) {
          // "此处只允许上传后缀名为.mp3,.wav,.m4a,.mp4,的文件!"
          resetMessage.error("请上传于MP3、WAV、MP4、M4a格式,其他格式暂不支持;");
          reject()
        }
        if (file.size > 1024 * 1024 * 512) {
          resetMessage.error("上传的录音文件大小不能超过512M");
          reject()
        }
        // --------------判断录音时长是否超过5小时----重点--------------------------
        var content = file;
        var url = URL.createObjectURL(content);
        //经测试,发现audio也可获取视频的时长
        var audioElement = new Audio(url);
        // 苹果拿不到数据,可以先播放/关闭下
        // fixed ios
        audioElement.muted = true
        audioElement.play().then(() => audioElement.pause())
        // fixed ios
        audioElement.addEventListener("canplay", (_event) => {
          this.audioDuration = parseInt(audioElement.duration);
          if (this.audioDuration >= 18000) {
            resetMessage.error("上传文件的时长必须小于5小时");
            reject()
          } else {
            resolve()
          }
---------------------------------------------------------------------------------------
        });
        audioElement.addEventListener('error', () => {
          reject()
        })
      })
    },

思路

1、在拿到file文件时,new一个Audio,然后监听canplay(浏览器可以开始播放该音视频)事件,事件触发时,通过audioElement.duration获取总时长。

2、为什么要用到Promise,因为监听canplay事件属于异步,如果不用,会导致文件上传后才提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值