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/jquery去掉空格,回车,换行示例代码
Nov 05 Javascript
DOM 高级编程
May 06 Javascript
微信小程序 MINA文件结构
Oct 17 Javascript
微信小程序 网络API 上传、下载详解
Nov 09 Javascript
js闭包用法实例详解
Dec 13 Javascript
完美的js图片轮换效果
Feb 05 Javascript
jQuery超简单遮罩层实现方法示例
Sep 06 jQuery
node微信开发之获取access_token+自定义菜单
Mar 17 Javascript
vue改变循环遍历后的数据实例
Nov 07 Javascript
d3.js实现图形拖拽
Dec 19 Javascript
JavaScript对象属性操作实例解析
Feb 04 Javascript
原生js实现表格翻页和跳转
Sep 29 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多用户计数器代码
2007/03/11 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
起点页面传值js,有空研究学习下
2010/01/25 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js的2种继承方式详解
2014/03/04 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
python获取目录下所有文件的方法
2015/06/01 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
python计算两个数的百分比方法
2018/06/29 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
Python argparse模块使用方法解析
2020/02/20 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
幼儿教师寄语集锦
2014/04/03 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
银行自荐信怎么写
2015/03/05 职场文书
酒店温馨提示语
2015/07/14 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
MySql分区类型及创建分区的方法
2022/04/13 MySQL