Vue实现腾讯云点播视频上传功能的实现代码


Posted in Javascript onAugust 17, 2020

基于Vue+ElementUI+vod-js-sdk-v6,完成腾讯云点播视频上传功能

最近做的一个项目,需要用到腾讯云点播的视频上传!!写一个尽可能详细的博客供各位参考,欢迎指正; ok,下面进入正题。
首先是需要用到的依赖:ElementUI、vod-js-sdk-v6、axios

npm i vod-js-sdk-v6
npm i axios
import vue from 'vue'
import { Upload, Progress } from 'element-ui'
vue.use(Upload)
vue.use(Progress)

我采用了ElementUI的手动上传组件,比之自动上传用户体验会更好一点

<template>
 <div class="upload_video" id="upload_video">
  <el-upload
  class="upload-demo"
  ref="upload"
  action="#"
  :http-request="uploadVideo" //自定义上传
  :accept='accept'
  :limit="1" //上传的文件数量
  :on-remove="handleRemove" //文件移除事件
  :on-change="handleChange" //文件改变事件
  :auto-upload="false">
    <el-button slot="trigger" size="small" type="primary">选取视频</el-button>
    <el-button style="margin-left: 40px;" size="small" type="success" @click="submitUpload">点击上传</el-button>
    <el-progress class="progress" :text-inside="true" :stroke-width="18" :percentage="progress" status="exception"></el-progress>
   <div slot="tip" class="el-upload__tip">只能上传mp4文件,且不超过500M</div>
  </el-upload>
  <video :src="videoURL" id="video" autoplay></video>
  <img id="video_img" style="width:90px;height:160px;display:none">
 </div>
</template>

接下来是一些变量的定义 以及sdk的引入

import TcVod from 'vod-js-sdk-v6'
export default {
 data () {
  return {
   // 文件列表
   fileList: [],
   // 上传成功后的地址
   videoURL: '',
   // 进度条百分比
   progress: 0,
   // base64图片地址 注:这个是项目需要设置一个默认的视频封面,不需要的忽略就行
   imgBase: '',
   // 上传视频获取成功后拿到的fileID【备用】
   fileId: ''
  }
 }
}

最后是具体逻辑

methods: {
  // 获取签名 这里的签名请求是由后端提供的,只需要拿到后端给的签名请求即可
  getVodSignature () {
   const url = '/bpi/artworkMaking/findSingature'
   return this.$axios.post(url).then(function (response) {
    return response.data.data
   })
  },
  // 文件列表改变时 将文件列表保存到本地
  handleChange (file, fileList) {
   this.fileList = fileList
  },
  // 点击上传时
  submitUpload () {
   if (this.fileList.length < 1) return this.$MessageBox('请先选取视频,再进行上传', '提示')
   this.uploadVideo()
  },
  // 自定义上传
  uploadVideo (e) {
   // 当
   console.log(this.fileList[0].raw)
   if (this.fileList.length < 1) {
    window.alert('您还没有选取文件')
   } else {
   	//必须以函数的形式返回 sdk参数限制
    const getSignature = async () => {
     const data = await this.getVodSignature()
     return data
    }
    const tcVod = new TcVod({
     getSignature: getSignature // 获取上传签名的函数
    })
    // 获取通过elementui上传到本地的文件 因为参数类型必须为file 不能直接以对象的形式传输
    const mediaFile = this.fileList[0].raw
    const uploader = tcVod.upload({
     mediaFile: mediaFile
    })
    // 监听上传进度
    uploader.on('media_progress', info => {
     this.progress = parseInt(info.percent * 100)
    })
    // 上传结束时,将url存到本地
    uploader.done().then(doneResult => {
     // 保存地址
     // console.log(doneResult)
     // console.log(this.fileId)
     this.fileId = doneResult.fileId
     this.videoURL = doneResult.video.url
     // 将视频的第一帧保存为封面 不需要封面的可以直接忽略掉以下代码
     const canvas = document.createElement('canvas')
     const img = document.getElementById('video_img')
     const video = document.getElementById('video')
     video.setAttribute('crossOrigin', 'anonymous')
     canvas.width = video.clientWidth
     canvas.height = video.clientHeight
     video.onloadeddata = (res) => {
      canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height)
      const dataURL = canvas.toDataURL('image/png')
      img.setAttribute('src', dataURL)
      // 拿到base64的字符串,并保存到本地
      this.imgBase = dataURL.split(',')[1]
     }
    })
   }
  },
  // 点击删除时
  handleRemove (file, fileList) {
   console.log(file, fileList.length)
  }
 }

大功告成,需要其他功能的小伙伴请自行参考腾讯云官方demo,去腾讯云文档官网看,不要看npm!!! 最后附上成品样式图0.0,右边空白是我预留的视频预览区域

Vue实现腾讯云点播视频上传功能的实现代码

总结

到此这篇关于Vue实现腾讯云点播视频上传功能的实现代码的文章就介绍到这了,更多相关vue腾讯云点播视频上传内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Javascript 遍历对象中的子对象
Jul 03 Javascript
Javascript中的包装类型介绍
Apr 02 Javascript
Jquery遍历Json数据的方法
Apr 20 Javascript
javascript实现实时输出当前的时间
Apr 27 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
Dec 13 Javascript
基于ajax与msmq技术的消息推送功能实现代码
Dec 26 Javascript
js拖动滑块和点击水波纹效果实例代码
Oct 16 Javascript
详解微信小程序开发(项目从零开始)
Jun 06 Javascript
Vue登录主页动态背景短视频制作
Sep 21 Javascript
js实现简单音乐播放器
Jun 30 Javascript
结合axios对项目中的api请求进行封装操作
Sep 21 Javascript
javascript实现贪吃蛇游戏(娱乐版)
Aug 17 #Javascript
three.js着色器材质的内置变量示例详解
Aug 16 #Javascript
Angular进行简单单元测试的实现方法实例
Aug 16 #Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 #Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 #Javascript
Vue使用axios引起的后台session不同操作
Aug 14 #Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 #Javascript
You might like
PHP新手上路(十)
2006/10/09 PHP
用PHP实现维护文件代码
2007/06/14 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
Python 字符串中的字符倒转
2008/09/06 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python编程实现希尔排序
2017/04/13 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
阿里云:Aliyun.com
2017/02/15 全球购物
导游的职业规划书范文
2013/12/27 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
超市开店计划书
2014/09/15 职场文书
作风转变年心得体会
2014/10/22 职场文书
法律进社区活动总结
2015/05/07 职场文书
小学运动会通讯稿
2015/07/18 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python