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 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
JavaScript实现的日期控件具体代码
Nov 18 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
JS实现重新加载当前页面
Nov 29 Javascript
详解使用fetch发送post请求时的参数处理
Apr 05 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
koa-router源码学习小结
Sep 07 Javascript
vue使用Font Awesome的方法步骤
Feb 26 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 Javascript
通过扫小程序码实现网站登陆功能
Aug 22 Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 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会话控制:Session与Cookie详解
2014/09/27 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
python删除文件示例分享
2014/01/28 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
如何教少儿学习Python编程
2020/07/10 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
判断单链表中是否存在环
2012/07/16 面试题
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers