0
点赞
收藏
分享

微信扫一扫

Excel文件解析

Greatiga 04-16 17:00 阅读 2

实现思路:上传视频前校验格式以及视频秒数是否在合理范围,是则上传到相对应的服务器上

HTML

 <input type="file" id="videoInput" accept="video/*" @change="checkVideoDuration"/>

JS

 // 检验格式与市场时长
    checkVideoDuration() {
      let that = this;
      let file = document.getElementById("videoInput").files[0];
      if (file.type.split("/")[0] !== "video") {
        this.$toast.fail("请上传视频格式");
        return;
      }
      let video = document.createElement("video");
      video.preload = "metadata";
      // 当视频的元数据加载完成后,会触发loadedmetadata事件
      video.onloadedmetadata = function () {
        window.URL.revokeObjectURL(video.src);
        if (video.duration >= 30) {
          that.upLoadVideo();
          // 允许上传操作
        } else {
          that.$toast.fail("请上传大于30s的视频哦");
          // 阻止上传操作
          event.preventDefault();
        }
      };

      video.src = URL.createObjectURL(event.target.files[0]);
}

    // 上传视频
    upLoadVideo() {
      let that = this;
      if (this.uploadToken) {
        var input = document.getElementById("videoInput");
        var file = input.files[0];
        let formData = new FormData();
        formData.append("file", file);
        formData.append("token", this.uploadToken);
        axios
          .post("你的服务器地址", formData)
          .then((response) => {
            that.$toast.success("视频上传成功");
          })
          .catch((error) => {
            that.$toast.fail("上传失败,请重新上传");
          });
      }
    },

在安卓机一切都很正常,但ios手机连loadedmetadata方法都没进入

想到的解决办法是先自动播放后立马暂停,然后回去视频的描述,但是由于微信h5是禁止了视频自动播放的,这方法不可行,最后使用vant插件结合异步操作解决了这个问题

HTML

 <van-uploader :after-read="afterRead" :before-read="beforeRead" :file-list="fileList" type="file" accept="video/*"/>

JS

 beforeRead(file) {
      let that = this;
      if (file.type.split("/")[0] !== "video") {
        this.$toast.fail("请上传视频格式");
        return false;
      }
      var url = URL.createObjectURL(file);
      var audioElement = new Audio(url);
      var result;
      audioElement.muted = true;
      audioElement.play().then(() => audioElement.pause());
      return new Promise((resolve, reject) => {
        audioElement.addEventListener("loadedmetadata", function () {
          // 视频时长值的获取要等到这个匿名函数执行完毕才产生
          result = audioElement.duration; //得到时长为秒,小数,182.36
          console.log(result);
          var serce = parseInt(result);
          if (serce < 30) {
            that.$toast.fail("视频时长不得低于30秒");
            reject();
          } else {
            that.loadingShow = true;
            resolve();
          }
        });
      });
    },

    // 视频上传后的处理
    afterRead(file) {
      let that = this;
      const { fileList } = this;
      let formData = new FormData();
      formData.append("file", file.file);
      axios
        .post("接口地址", formData)
        .then((response) => {
          that.$toast.success("视频上传成功");
        })
        .catch((error) => {
          that.$toast.fail("上传失败,请重新上传");
        });
    },

举报

相关推荐

0 条评论