首页 > 其他分享 >vue使用阿里云视频点播上传

vue使用阿里云视频点播上传

时间:2022-12-06 22:47:08浏览次数:45  
标签:vue console log uploadInfo uploader file 视频点播 上传

Web(JavaScript)上传SDK(STS方式)

阿里云文档地址:https://www.alibabacloud.com/help/zh/apsaravideo-for-vod/latest/use-the-upload-sdk-for-javascript

 

 

 

 

 

 下载后在index.html引入

  vue页面代码:

<el-upload action="" :auto-upload="false" :file-list="fileList" accept=".mp4,.avi,.mpv,.flv"
                :on-change="videoChange"
                :limit="1">
                <el-button slot="trigger" size="small" >选取文件</el-button>
                <el-button :disabled="uploadDisabled" size="small" type="primary"
                  @click="toalySaveVideo">开始上传
                </el-button>
                <span class="fs12 color-999 m-l-10">上传进度: <i id="auth-progress">{{ authProgress }}</i> %</span>
                <div slot="tip" class="fs12 color-999">支持扩展名:.mp4 .avi .mpv .flv</div>
</el-upload>

   fileList: [],    uploadDisabled: true,    authProgress: 0,// 进度条百分比
// 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调
    videoChange(file, fileList) {
      console.log(file, fileList)
      let _this = this
      let fileReader = new FileReader()
      fileReader.readAsDataURL(file.raw)
      fileReader.onload = function (e) {
        _this.videoDataUrl = e.currentTarget.result
      }
      this.videoData = file
      console.log(file.size / 1024 / 1024)
      let userData = '{"Vod":{}}'
      if (this.uploader) {
        this.uploader.stopUpload()
        this.authProgress = 0;
      }
      this.uploader = this.createUplader(this)
      this.uploader.addFile(file.raw, null, null, null, userData)
      this.uploadDisabled = false;
      this.resumeDisabled = true;
    },
    createUplader(_this) {
      let uploader = new window.AliyunUpload.Vod({
        partSize: _this.videoDataForm.partSize,
        parallel: _this.parallel || 5,
        retryCount: _this.videoDataForm.retryCount,
        retryDuration: _this.videoDataForm.retryDuration,
        region: _this.videoDataForm.region,
        userId: _this.videoDataForm.userId,
        enableUploadProgress: true,    //是否上报上传日志到点播,默认为true
        // 添加文件成功
        addFileSuccess: function (uploadInfo) {
          console.log(uploadInfo, 'uploadInfo');
          self.uploadDisabled = false;
          self.resumeDisabled = false;
          self.statusText = '添加文件成功, 等待上传...';
          console.log('addFileSuccess: ' + uploadInfo.file.name);
        },
        // 开始上传
        'onUploadstarted': function (uploadInfo) {
          // 获取上传凭证
          req.getUploadVoucher().then((res) => {
            if (res.code === 0) {
              console.log(uploadInfo, "uuyuuy")
              var info = res.result.filePath.credentials;
              var accessKeyId = info.accessKeyId;
              var accessKeySecret = info.accessKeySecret;
              var secretToken = info.securityToken;
              uploader.setSTSToken(
                uploadInfo,
                accessKeyId,
                accessKeySecret,
                secretToken
              );
              
            } else {
              _this.$message.warning(res.msg);
            }
          });
        },
        // 文件上传成功
        'onUploadSucceed': function (uploadInfo) {
          console.log(uploadInfo)
          //  获取视频时长
          let videoUrl = URL.createObjectURL(uploadInfo.file);
          let audioElement = new Audio(videoUrl);
          audioElement.addEventListener('loadedmetadata', () => {
            _this.form.videoDuration = audioElement.duration; //时长为秒,小数,182.36
          });
          _this.form.fileAddressId = uploadInfo.videoId;
          _this.$refs.form.validateField('fileAddressId')
          _this.form.videoName = uploadInfo.file.name.substring(0, uploadInfo.file.name.lastIndexOf('.'));//js获取文件文件名去掉后缀名
          _this.form.videoFileName = uploadInfo.file.name;
          _this.form.videoNum = 1;
        },
        // 文件上传失败
        'onUploadFailed': function (uploadInfo) {
          _this.$message.warning('文件上传失败');
          console.log(uploadInfo)
        },
        // 文件上传进度,单位:字节
        'onUploadProgress': function (uploadInfo, totalSize, loadedPercent) {
          console.log(uploadInfo)
          console.log(loadedPercent, "loadedPercent")
          let progressPercent = Math.ceil(loadedPercent * 100);
          _this.authProgress = progressPercent;
        },
        // 上传凭证超时
        'onUploadTokenExpired': function () {
          console.log("onUploadTokenExpired");
          //实现时,根据uploadInfo.videoId调用刷新视频上传凭证接口重新获取UploadAuth
          //从点播服务刷新的uploadAuth,设置到SDK里   
          _this.$message.success('上传文件超时,正在重新上传')
          // uploader.resumeUploadWithAuth(uploadAuth);
        },
        //全部文件上传结束
        'onUploadEnd': function (uploadInfo) {
          console.log(uploadInfo, "onUploadEnd: uploaded all the files");
          _this.$message.success('上传成功!')
        }
      });
      return uploader
    },
    // 开始上传
    toalySaveVideo() {
      this.uploader.startUpload()
      this.uploadDisabled = true;
    },

 

 页面效果:

 

 

 

标签:vue,console,log,uploadInfo,uploader,file,视频点播,上传
From: https://www.cnblogs.com/ZYSZBD/p/16961644.html

相关文章

  • vue项目中上传文件到阿里云oss方法 结合element ui 中的 el-upload
       在项目需求中,关于图片、视频、文件等上传文件,一般不是直接放置在自己的后台服务器上,一般都会购买云服务进行存储。譬如阿里云的oss对象存储。   前端开发项......
  • vue3 v-model 双向更新
    原文地址:https://juejin.cn/post/7124602963058196516constprops=defineProps({//v-modelmodelValue:{type:String,default:''},})constemit=......
  • typora上传博客到博客园及所遇问题解决方法
    一.配置dotnet1.下载dotnet首先要到官网下载dotnet,这里根据本人多次下载尝试以及上网查询,推荐下载5.0版本的下载地址根据自己电脑配置下载,注意下载左边的,不需要下载右......
  • vue3-watch、watchEffect侦听器
    watch是用来对动态绑定的数据的变化进行监听和操作的一个API。使用格式为:watch(监听的字面量,(新值,旧值)=>{do()},{deep:true}//可选{flush:sync,pre,po......
  • vue安装node-sass总是报错
    第一种方式安装会直接安装最新版,sass-loader和node-sass版本可能会匹配报错,因为sass-loader可能会版本过高。如果报错可以指定以下版本则会匹配成功npminstallsass--s......
  • vue-router封装结构
    index.js文件importVuefrom'vue'importVueRouterfrom"vue-router"importroutesfrom'./routes'Vue.use(VueRouter)//解決编程式路由住同一地址跳转时......
  • vue3 vite 使用 echarts 之 折线图堆叠
    1.npm安装npminstallecharts--save 2.使用<template><div><divid="myChart123":style="{width:'1500px',height:'550px'}"></div></div></t......
  • Vue3 企业级优雅实战 - 组件库框架 - 8 搭建组件库 cli
    前面的文章分享了组件库的开发、example、组件库文档,本文分享组件库cli开发。1为什么要开发组件库cli回顾一个新组件的完整开发步骤:1在packages目录下创建组件目......
  • SpringBoot文件分片上传,断点续传
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......
  • 【vue3】element-plus,Checkbox-Group多选框之绑定选中数据不选中问题
    今天记录一下在新项目vue3中,使用的element-plus组价库遇到的一个问题!场景如下:有一个表格的column绑定的数组对象,我需要对表格的头部实现动态可配置显示表格列,由于绑定的col......