news 2026/7/19 16:39:16

阿里云视频点播上传获取地址和凭证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
阿里云视频点播上传获取地址和凭证

第一步:下载sdk;

composer require alibabacloud/vod-20170321 3.9.1 composer require alibabacloud/tea-utils

第二步:在html里上传视频时,需要获取地址和上传凭证;

根据阿里云官方提供的源码示例:这里我只贴出一部分;

function createUploader () { var uploader = new AliyunUpload.Vod({ timeout: 60000, partSize: 1048576, parallel: 5, retryCount: 3, retryDuration: 2, region: 'cn-shanghai', userId: $('#userId').val(), localCheckpoint: true, //此参数是禁用服务端缓存 // 添加文件成功 addFileSuccess: function (uploadInfo) { console.log('addFileSuccess'); $('#authUpload').attr('disabled', false); $('#resumeUpload').attr('disabled', false); $('#status').text('添加文件成功, 等待上传...'); console.log("addFileSuccess: " + uploadInfo.file.name); }, // 开始上传 onUploadstarted: function (uploadInfo) { // 如果是 UploadAuth 上传方式, 需要调用 uploader.setUploadAuthAndAddress 方法 // 如果是 UploadAuth 上传方式, 需要根据 uploadInfo.videoId是否有值,调用点播的不同接口获取uploadauth和uploadAddress // 如果 uploadInfo.videoId 有值,调用刷新视频上传凭证接口,否则调用创建视频上传凭证接口 // 注意: 这里是测试 demo 所以直接调用了获取 UploadAuth 的测试接口, 用户在使用时需要判断 uploadInfo.videoId 存在与否从而调用 openApi // 如果 uploadInfo.videoId 存在, 调用 刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html) // 如果 uploadInfo.videoId 不存在,调用 获取视频上传地址和凭证接口(https://help.aliyun.com/document_detail/55407.html) // 统一的获取凭证失败处理 var handleAuthRequestFail = function (jqXHR, textStatus, errorThrown, scene) { console.error(scene + ' 失败:', textStatus, errorThrown); var errMsg = (jqXHR && jqXHR.status) ? ('HTTP ' + jqXHR.status) : (textStatus || '网络错误'); $('#status').text(scene + '失败,请稍后重试(' + errMsg + ')'); if (uploader) { uploader.stopUpload(); } $('#authUpload').attr('disabled', false); $('#pauseUpload').attr('disabled', true); $('#resumeUpload').attr('disabled', false); } if (!uploadInfo.videoId) { var createUrl = 'https://demo.xxx.cn/api/video/createdUploadVideo/'; $.get(createUrl, function (data) { var uploadAuth = data.uploadAuth; var uploadAddress = data.uploadAddress; var videoId = data.videoId; uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId); }, 'json').fail(function (jqXHR, textStatus, errorThrown) { handleAuthRequestFail(jqXHR, textStatus, errorThrown, '获取视频上传凭证') }); $('#status').text('文件开始上传...'); console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object); } else { // 如果videoId有值,根据videoId刷新上传凭证 // https://help.aliyun.com/document_detail/55408.html?spm=a2c4g.11186623.6.630.BoYYcY var refreshUrl = 'https://demo.xxx.cn/api/video/refreshUploadVideo/?videoId=' + uploadInfo.videoId; $.get(refreshUrl, function (data) { var uploadAuth = data.uploadAuth; var uploadAddress = data.uploadAddress; var videoId = data.videoId; uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId); }, 'json').fail(function (jqXHR, textStatus, errorThrown) { handleAuthRequestFail(jqXHR, textStatus, errorThrown, '刷新视频上传凭证'); }) } }, // 文件上传成功 onUploadSucceed: function (uploadInfo) { console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object); $('#status').text('文件上传成功!'); }, // 文件上传失败 onUploadFailed: function (uploadInfo, code, message) { console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message); $('#status').text('文件上传失败!'); }, // 取消文件上传 onUploadCanceled: function (uploadInfo, code, message) { console.log("Canceled file: " + uploadInfo.file.name + ", code: " + code + ", message:" + message); $('#status').text('文件上传已暂停!'); }, // 文件上传进度,单位:字节, 可以在这个函数中拿到上传进度并显示在页面上 onUploadProgress: function (uploadInfo, totalSize, progress) { console.log("onUploadProgress:file:" + uploadInfo.file.name + ", fileSize:" + totalSize + ", percent:" + Math.ceil(progress * 100) + "%"); var progressPercent = Math.ceil(progress * 100); $('#auth-progress').text(progressPercent); $('#status').text('文件上传中...'); }, // 上传凭证超时 onUploadTokenExpired: function (uploadInfo) { // 上传大文件超时, 如果是上传方式一即根据 UploadAuth 上传时 // 需要根据 uploadInfo.videoId 调用刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)重新获取 UploadAuth // 然后调用 resumeUploadWithAuth 方法, 这里是测试接口, 所以我直接获取了 UploadAuth $('#status').text('文件上传超时!'); let refreshUrl = 'https://demo.xxx.cn/api/video/refreshUploadVideo/?videoId=' + uploadInfo.videoId; $.get(refreshUrl, function (data) { var uploadAuth = data.uploadAuth; // 源文档是UploadAuth,是错误的; uploader.resumeUploadWithAuth(uploadAuth); console.log('upload expired and resume upload with uploadauth ' + uploadAuth); }, 'json').fail(function (jqXHR, textStatus, errorThrown) { console.error('凭证过期后刷新 UploadAuth 失败:', textStatus, errorThrown); var errMsg = (jqXHR && jqXHR.status) ? ('HTTP ' + jqXHR.status) : (textStatus || '网络错误'); $('#status').text('上传凭证已过期,刷新凭证失败,请点击"恢复上传"重试(' + errMsg + ')'); // 刷新凭证失败,停止当前上传并恢复按钮状态,等待用户手动恢复; if (uploader) { uploader.stopUpload(); } $('#pauseUpload').attr('disabled', true); $('#resumeUpload').attr('disabled', false); }) }, // 全部文件上传结束 onUploadEnd: function (uploadInfo) { $('#status').text('文件上传完毕!'); console.log("onUploadEnd: uploaded all the files"); } }) return uploader; }

第三步:在thinkphp8框架下:

use AlibabaCloud\SDK\Vod\V20170321\Vod; use AlibabaCloud\Credentials\Credential; use \Exception; use AlibabaCloud\Tea\Exception\TeaError; use AlibabaCloud\Tea\Utils\Utils; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\SDK\Vod\V20170321\Models\CreateUploadVideoRequest; use AlibabaCloud\SDK\Vod\V20170321\Models\RefreshUploadVideoRequest; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; class Demo { private function createClient(){ $credential = new Credential(); $config = new Config([ "accessKeyId" => '你的keyID', "accessKeySecret" => '你的keySecret' ]); $config->endpoint = "vod.cn-shanghai.aliyuncs.com"; return new Vod($config); } /** * 获取音视频上传地址和凭证; */ public function createdUploadVideo(){ $client = $this->createClient(); $createUploadVideoRequest = new CreateUploadVideoRequest([ "fileName" => "demo.mp4", "title" => "demo" ]); $runtime = new RuntimeOptions([]); try { $result = $client->createUploadVideoWithOptions($createUploadVideoRequest, $runtime); $res = $result->body; return json($res); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } $errMsg = Utils::assertAsString($error->message); return $errMsg; } } /** *用于视频文件上传超时后重新获取视频上传凭证 */ public function refreshUploadVideo() { $client = self::createClient(); $refreshUploadVideoRequest = new RefreshUploadVideoRequest([ "videoId" => "80aca47ad03271f0a7415420848d0102" ]); $runtime = new RuntimeOptions([]); try { $result = $client->refreshUploadVideoWithOptions($refreshUploadVideoRequest, $runtime); $res = $result->body; return json($res); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } $errMsg = Utils::assertAsString($error->message); return $errMsg; } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 16:34:46

终极教程:三步快速掌握国家中小学智慧教育平台电子课本下载

终极教程:三步快速掌握国家中小学智慧教育平台电子课本下载 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…

作者头像 李华
网站建设 2026/7/19 16:29:05

未来展望:ChromeOS Firmware Utility Scripts的路线图与新功能预览

未来展望:ChromeOS Firmware Utility Scripts的路线图与新功能预览 【免费下载链接】scripts Scripts for setup/install/firmware update for ChromeOS devices 项目地址: https://gitcode.com/gh_mirrors/scripts54/scripts ChromeOS Firmware Utility Scr…

作者头像 李华
网站建设 2026/7/19 16:26:55

TMS320F28003x CMPSS数字滤波器:硬件去抖与实时信号调理实战

1. 项目概述与数字滤波器在实时控制中的核心价值 在电机驱动、数字电源或者任何需要高精度实时控制的嵌入式系统里,我们工程师最头疼的问题之一,就是如何从充满噪声的模拟信号中,提取出真正有用的“状态”信息。比如,你想通过一个…

作者头像 李华