vue结合el-upload实现腾讯云视频上传功能


Posted in Javascript onJuly 01, 2020

起因

根据需求要实现一个视频上传功能,之前采用七牛云上传,小点视频没问题,大体积视频比如600M左右,再考虑到网速等其他原因就会花费半个小时左右。

后来分析到不仅要考虑上传时间的问题,更重要的是要考虑用户使用4G 网络的情况,考虑用户的流量,线上的视频,不能不做压缩转码,就放到页面上,视频不是图片,不能甩到 cdn 上就行了。 要考虑视频大小,pc 移动端适配,转码,还有防盗版等问题。

最终决定使用腾讯云上传视频,我的项目是web端上传,参考以下链接

官网链接:cloud.tencent.com/document/product/266/9239#.E6.96.AD.E7.82.B9.E7.BB.AD.E4.BC.A0

在项目中的使用

项目使用vue.js + element-ui el-upload组件

引入sdk:

npm install vod-js-sdk-v6
import TcVod from 'vod-js-sdk-v6'

html代码

//上传
 <el-upload
  ref="upload"
  action="filename" 
  :http-request="httpRequest"
  :show-file-list="false">
  <i v-if="videoFlag == false" class="el-icon-plus avatar-uploader-icon"></i>
 </el-upload>
 
 // 进度条
 <el-progress
   v-if="videoFlag"
   type="circle"
   :percentage="videoUploadPercent"
  ></el-progress>
  • action:上传地址,必填,但我们使用http-request,填任意字符串即可,没有实际意义。
  • http-request:覆盖默认上传行为,我们这里就需要自定义上传行为
  • percentage:进度条进度

js代码

methods:{
 // 视频-自定义地址
  httpRequest(file){
  const _this = this
   // 限制视频格式
   if (["video/mp4", "video/quicktime"].indexOf(file.file.type) == -1) {
    this.$message.error("视频格式有误,上传失败");
    return false;
   }
    // 限制视频小于700M
   const isLt10M = file.file.size / 1024 / 1024 < 700;
   if (!isLt10M) {
    this.$message.error("请上传MP4、MOV格式且不超过700MB的视频哦!");
    return false;
   }
    // 显示进度条从0开始
    _this.videoFlag = true
    this.videoUploadPercent=0
   // 获取视频签名
    const getSignature = async function(){
     return await getuploadsignature({ //这里就是发axios请求
      video_type:'operating_activity' // 参数是和后台定义的,不需要可以不写
     }).then(res => {
       return res
     })
  }

  // 前文中所述的获取上传签名的函数
  const tcVod = new TcVod({
   getSignature:getSignature
   })
  const uploader = tcVod.upload({
   mediaFile: file.file // 这里腾讯云需要获取到file文件里的name,根据你file结构进行填写
  })
  this.uploaderG = uploader // 定义全局用于取消上传

  // 进度
  uploader.on('media_progress', function(info) {
    _this.videoUploadPercent = parseInt(info.percent * 100);
  })

  // 上传成功
  uploader.done().then((doneResult) => {
    _this.videoFlag = false // 关闭进度条
    _this.videoForm.Video = doneResult.fileId // 存储fileId
    // 这里发请求给后端进行转码操作
    const data = {
     file_id:doneResult.fileId, // 腾讯云file_id
     video_type:'operating_activity', // 视频类型
     video_name:'', // 视频名称
     video_url: doneResult.video && doneResult.video.url?doneResult.video.url:'',// 视频地址
    }
    // 腾讯视频转码
    videoProcedure(data)
    .then(res => {
    }).catch(err => {
     console.log(err)
    })
  }).catch( (err) => {
   console.log(err)
  })
}
}

转码需要一定的时间,视频体积越大转码时间越长。
表单提交时将fileId值传给后端,等需要预览视频时,获取fileId后请求后端的视频详情接口,最终播放返回的视频地址即可。

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

Javascript 相关文章推荐
js不是基础的基础
Dec 24 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
Dec 08 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
Mar 14 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
jquery pagination分页插件使用详解(后台struts2)
Jan 22 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
May 25 jQuery
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
详解vue3.0 diff算法的使用(超详细)
Jul 01 #Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
Jul 01 #Javascript
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 #Javascript
微信小程序用户盒子、宫格列表的实现
Jul 01 #Javascript
vue商城中商品“筛选器”功能的实现代码
Jul 01 #Javascript
vue实现购物车列表
Jun 30 #Javascript
vue实现简单图片上传
Jun 30 #Javascript
You might like
php引用传值实例详解学习
2013/11/06 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
vue点击自增和求和的实例代码
2019/11/06 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Python如何对齐字符串
2020/07/30 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
销售副总经理岗位职责
2013/12/11 职场文书
《王二小》教学反思
2014/02/27 职场文书
2015年电工工作总结
2015/04/10 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python