IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 腾讯云web直传 -> 正文阅读

[PHP知识库]腾讯云web直传

背景:

最近由于公司需要上传视频并可以播放的需求,因此用到了腾讯云的云点播功能,直接用的web客户端上传,代码简单,非常容易,但也踩过了一些坑,特地记录下。作为一个多年经验但是技术能力差强人意的php开发工程师,一套很简单的代码,被我玩了一天。

官方文档:

API文档:https://cloud.tencent.com/document/product/266/9239

踩过的坑:

写在前头,千万不要什么都跟官方文档来!!!
1,提交时,若是提示uploader.ts:355 Uncaught (in promise) Error: ugc upload | invalid request,不要以为真的是权限的问题,或者是secret_id 和secret_key有问题,第一反应应该是你签名有没有问题。 官方文档上,是通过

function getSignature() {
	return axios.post(url).then(function (response) {
	  return response.data.signature;
	})
};

获取后台签名 ,这是有问题的,上面是错的!!!,因为返回的是一个promise对象!!!
需要同步获取,或者是获取完,再进行上传调用,例如:

var getSignature = async function getSignature() {
    var mySign = ''
    await  axios.post('/career/get_tencent_vod_sign').then(function (response) {
        mySign =  response.data.signature;
    });
    return mySign ;
};

如果是用ajax写的,可以参考下面的代码

2,注意控制上传文件类型和大小

主要代码:

php模块(获取签名):

 public static function getSign($expire = 86400){
        // 密钥(腾讯云指定)
        $secret_id = "**************";
        $secret_key = "**************";
        // 确定签名的当前时间和失效时间
        $current = time();
        $expired = $current + $expire;  
        // 向参数列表填入参数
        $arg_list = array(
            "classId" => '**********', 
            "secretId" => $secret_id,
            "currentTimeStamp" => $current,
            "expireTime" => $expired,
            "random" => rand());
        // 计算签名
        $original = http_build_query($arg_list);
        $sign = base64_encode(hash_hmac('SHA1', $original, $secret_key, true).$original);
        return $sign;
    }

js模块(处理业务):

      bindEvent: function bindEvent() {
          var _self = this;
          //选择文件
          $(document).on("click", '.chooseFile', function () {
              $('.vExampleFile').trigger('click');
          });
          //点击上传
          $(document).on("change", '.vExampleFile', function () {
              _self.mediaUpload();
          });
      },
      //文件上传
      mediaUpload: function mediaUpload() {
          var _self = this;
          var mediaFile = $(".vExampleFile")[0].files[0];
          //判断文件大小
          if (mediaFile.size > 200 * 1024 * 1024) {
              $.showMessage('上传视频不能大于200M');
              return false;
          }
          //判断视频时长
          var url = URL.createObjectURL(mediaFile);
          var videos = document.createElement('video');
          videos.src = url;
          //需要等一会儿
          setTimeout(function () {
              if (videos.readyState > 0) {
                  var minutes = parseInt(videos.duration / 60, 10);
                  var seconds = videos.duration % 30;
                  if (minutes > 60) {
                      $.showMessage('上传视频时长不能大于30分钟');
                      return;
                  }
                  //获取云点播的签名
                  $.ajax({
                      url:"后台接口地址",
                      method:"post",
                      success:function(res){
                          var _sign = res.data.signature;
                          if(_sign === '' || _sign === 'undefined' || _sign === null) {
                              $.showMessage('获取签名失败');
                              return;
                          }
                          //上传到腾讯云点播
                          _self.vodUpload(_sign);
                      },
                      error:function(err){
                          $.showMessage(err);
                          return;
                      }
                  })
              }
          }, 500);
      },
      //上传到腾讯云点播
      vodUpload: function vodUpload(_sign) {
          var _self = this;
          var tcVod = new TcVod.default({
              getSignature: function getSignature() {
                  return _sign;
              }
          });
          var content = "<span class=\"ui-dialog-loading\"></span>";
          var stateDialog = $.dialog({
              width: 130,
              content: '<span class="ui-dialog-loading"></span><div style="text-align: center;">' + content + '文件准备中...</div>'
          });
          stateDialog.show();
          var mediaFile = $(".vExampleFile")[0].files[0];
          var uploader = tcVod.upload({
              mediaFile: mediaFile
          });
          //上传进度
          uploader.on('media_progress', function (info) {
              //console.log(info);
              var media_pencent = (info.percent * 100).toFixed(2);
              stateDialog.content(content + "上传进度:" + media_pencent + '%');
          });
          //上传完成
          uploader.on('media_upload', function (info) {
              //console.log(info);
          });
          //上传完成回调
          uploader.done().then(function (doneResult) {
              //console.log(doneResult);
              stateDialog.close();
              $.showMessage('上传成功');
              //回调函数
               call_back_func(doneResult);
               //其中 doneResult 包含下列一些字段
              // url: doneResult.video.url,
              //     title: mediaFile.name,
              //     fileId: doneResult.fileId
          });
      }
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:29:47  更:2021-08-18 12:31:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/15 6:21:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码