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 相关文章推荐
web 页面分页打印的实现
Jun 22 Javascript
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
了解Javascript的模块化开发
Mar 02 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
使用BootStrap进行轮播图的制作
Jan 06 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
Apr 13 Javascript
Vue resource中的GET与POST请求的实例代码
Jul 21 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
jQuery实现简单的Ajax调用功能示例
Feb 15 jQuery
mpvue性能优化实战技巧(小结)
Apr 17 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
Jul 17 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
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
动态加载iframe
2006/06/16 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
个人思想理论学习的自我鉴定
2013/11/30 职场文书
车祸赔偿收入证明
2014/01/09 职场文书
授权委托书怎么写
2014/09/25 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
作文之亲情600字
2019/09/23 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL