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 相关文章推荐
javascript 客户端验证上传图片的大小(兼容IE和火狐)
Aug 15 Javascript
23个Javascript弹出窗口特效整理
Feb 25 Javascript
extjs4 treepanel动态改变行高度示例
Dec 17 Javascript
如何判断微信内置浏览器(通过User Agent实现)
Sep 01 Javascript
jQuery中ajax的post()方法用法实例
Dec 26 Javascript
jquery简单实现图片切换效果的方法
May 12 Javascript
在JavaScript中处理数组之reverse()方法的使用
Jun 09 Javascript
windows下vue.js开发环境搭建教程
Mar 20 Javascript
详解VUE 定义全局变量的几种实现方式
Jun 01 Javascript
简单实现js进度条加载效果
Mar 25 Javascript
Js利用prototype自定义数组方法示例
Oct 20 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
May 14 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利用ZipArchive类操作文件的实例
2020/01/21 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
利用python代码写的12306订票代码
2015/12/20 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
销售会计工作职责
2013/12/02 职场文书
成绩单评语
2015/01/04 职场文书
公司食堂管理制度
2015/08/05 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书