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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
js检测网络是否具体连接功能的代码
May 23 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
Aug 21 Javascript
AngularJS入门心得之directive和controller通信过程
Jan 25 Javascript
深入理解(function(){... })();
Aug 16 Javascript
JavaScript  event对象整理及详细介绍
Oct 10 Javascript
JavaScript中for循环的几种写法与效率总结
Feb 03 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
解决vue路由后界面没有变化,但是链接有的问题
Sep 01 Javascript
前端面试知识点目录一览
Apr 15 Javascript
vue中配置scss全局变量的步骤
Dec 28 Vue.js
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数组操作
2011/12/30 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
js的event详解。
2006/09/06 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
Python3实现购物车功能
2018/04/18 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python读取csv文件实例解析
2019/12/30 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
初中升旗仪式演讲稿
2014/05/08 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
药品开票员岗位职责
2015/04/15 职场文书
针对吵架老公保证书
2015/05/08 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书