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 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
js 编写规范
Mar 03 Javascript
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
jquery animate图片模向滑动示例代码
Jan 26 Javascript
关于jquery css的使用介绍
Apr 18 Javascript
纯js模拟div层弹性运动的方法
Jul 27 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
jQuery动态改变多行文本框高度的方法
Sep 07 Javascript
jQuery继承extend用法详解
Oct 10 Javascript
vue click.stop阻止点击事件继续传播的方法
Sep 04 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 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
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python中pygame安装方法图文详解
2015/11/11 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
机电专业毕业生求职信
2013/10/27 职场文书
打造完美自荐信
2014/01/24 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
讲党性心得体会
2014/09/03 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
小学校本教研总结
2015/08/13 职场文书
如何写好开幕词?
2019/06/24 职场文书
Redis数据同步之redis shake的实现方法
2022/04/21 Redis