当前位置: 首页 > news >正文

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

第一步:下载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; } } }
http://www.jsqmd.com/news/1220916/

相关文章:

  • 终极AI视觉对话模型:mlx-community/gemma-4-31b-it-5bit完全指南
  • 2026 年 AI 表格工具怎么选:ChatGPT、原生 Copilot/Gemini 与公式助手
  • shadcn-chatbot-kit终极指南:10分钟构建现代化AI聊天机器人界面
  • 终极指南:如何用Zotero-mdnotes插件一键将文献转换为Markdown笔记
  • LLaDA2.2-flash核心突破:Levenshtein Editing如何实现智能体精准文本编辑?
  • 2026年欧米茄中国区售后服务网络更新优化,全国唯一售后热线以及线下网点地址 - 欧米茄售后服务官网
  • Expression库与Pydantic集成:构建类型安全的Python API开发指南
  • 深入理解k8s-sidecar:如何实现Kubernetes配置文件的动态同步与实时更新
  • Anatole主题作品集功能详解:打造专业个人展示页面的完整教程
  • MOSS-Music-8B-Thinking-6bit架构揭秘:多模态音乐AI的完整技术栈
  • 零基础学习IcedCoffeeScript:从Hello World到异步网络请求
  • CANN启航营社区贡献指南:如何成为AI教育开源项目的贡献者
  • Typhoon OCR 1.5 2B 8位量化模型:苹果芯片上的终极泰英文档OCR解决方案
  • 腾讯混元Hy3-FP8 FP8量化技术深度解析:如何实现4倍内存效率提升
  • LogExpert完全指南:Windows平台终极日志分析工具
  • 面向开发者:Laguna-XS-2.1-5bit配置文件详解与自定义参数调优指南
  • 潞城专业除甲醛公司怎么选?横向全维度对比,长治沐科环保脱颖而出 - 专注室内空气检测治理
  • Ptex高级特性探索:多分辨率纹理与动态加载策略终极指南
  • 163MusicLyrics:终极跨平台云音乐歌词提取工具完全指南
  • Anatole主题自定义开发指南:从CSS样式到JavaScript扩展的完整教程
  • 突破百度网盘速度屏障:BaiduPCS-Go深度探索与技术实践
  • 腾讯混元Hy3-FP8:295B参数MoE大模型完全指南
  • 2026汕头靠谱防水公司推荐:卫生间免砸砖、外墙、地下室、楼顶渗漏维修 精选服务商(7月 - 吉林同城获客
  • 如何高效使用UnityMainThreadDispatcher:专业开发者的实战指南
  • TwitterMediaHarvest事件驱动架构详解:构建响应式浏览器扩展的完整指南
  • 深入解析C2000 ADC寄存器:从基础配置到电机控制实战
  • GenshinPlayerQuery:原神玩家信息查询的终极解决方案
  • 2026年7月最新郑州中原区建设路街道亨得利官方名表服务中心电话公示 - 亨得利官方博客
  • 如何用UE4SS解锁虚幻引擎游戏的无限可能性:从零开始的终极指南
  • Steam DRM破解技术深度解析:自动化游戏备份与离线启动解决方案