新闻中心

解决BunnyStream TUS视频上传401认证错误:完整指南

2025-11-29
浏览次数:
返回列表

解决BunnyStream TUS视频上传401认证错误:完整指南

本文旨在解决使用tus协议上传视频至bunnystream服务时遇到的401认证错误。核心问题通常源于api密钥、授权签名、过期时间戳、视频库id等参数配置不当。教程将详细阐述如何正确配置这些认证参数,包括api密钥的获取、unix时间戳的计算、sha256签名的生成,并提供修正后的j*ascript代码示例,同时强调“受信任站点”的重要性,确保您能顺利完成bunnystream的视频上传。

BunnyStream TUS上传认证问题排查与解决

在使用TUS协议上传视频到BunnyStream服务时,开发者可能会遇到“Error: tus: unexpected response while creating upload, originated from request (method: POST, url: https://www.php.cn/link/92b1f191dfce9fff64b4effd954ccaab, response code: 401, response text: , request id: n/a)”这样的401 Unauthorized错误。这通常意味着上传请求未能通过BunnyStream的身份验证。本文将深入解析导致此问题的原因,并提供一套完整的解决方案。

1. 理解BunnyStream TUS上传的认证机制

BunnyStream的TUS上传API要求在请求头中包含特定的认证信息,以确保只有授权用户才能上传内容。这些关键信息包括:

  • AuthorizationSignature: 一个SHA256签名,用于验证请求的合法性。
  • AuthorizationExpire: 签名和请求的过期时间,必须是Unix时间戳。
  • VideoId: 预先通过BunnyStream API创建的视频对象的GUID。
  • LibraryId: 目标视频库的ID。

任何这些参数的错误配置都可能导致401认证失败。

2. 核心参数的正确配置

2.1 API密钥 (AccessKey)

在您的代码中,AccessKey变量必须替换为您的BunnyCDN API密钥。请注意,这通常是您的账户API密钥或具有视频管理权限的视频API密钥。您可以在BunnyCDN控制面板中找到并生成这些密钥。切勿使用其他非API密钥的凭证。

2.2 授权过期时间 (AuthorizationExpire)

AuthorizationExpire参数必须是一个Unix时间戳,表示签名和请求的有效截止时间。这个时间戳应该是未来的某个时间点,例如,当前时间加上一天。

计算方法: 获取当前时间(毫秒),除以1000转换为秒,然后加上希望的有效时长(例如,一天是24 * 60 * 60秒)。

// 获取当前Unix时间戳(秒)
const currentTimeInSeconds = Math.floor(Date.now() / 1000);
// 设置过期时间为当前时间+1天
const expirationTime = currentTimeInSeconds + (24 * 60 * 60); // 1天 = 86400秒

2.3 授权签名 (AuthorizationSignature)

AuthorizationSignature是通过SHA256算法对特定字符串进行哈希处理后生成。这个字符串的组成顺序和内容至关重要:

SHA256(library_id + api_key + expiration_time + video_id)

来画数字人直播 来画数字人|直播|

来画数字人自动化|直播|,无需请真人主播,即可实现24小时|直播|,无缝衔接各大|直播|平台。

来画数字人直播 57 查看详情 来画数字人直播

注意:

  • library_id:您的视频库ID。
  • api_key:您的BunnyCDN API密钥(与AccessKey相同)。
  • expiration_time:您在AuthorizationExpire中设置的Unix时间戳
  • video_id:您预先创建的视频对象的GUID。

务必确保在生成签名时,api_key和expiration_time与请求头中实际发送的值完全一致。

2.4 视频库ID (LibraryId) 和视频ID (VideoId)

  • LibraryId: 这是您在BunnyCDN中创建的视频库的唯一标识符。您可以在BunnyCDN控制面板的“Stream”部分找到它。
  • VideoId: 在执行TUS上传之前,您需要先调用BunnyStream的“Create Video”API来创建一个视频占位符。该API会返回一个GUID,这就是VideoId。

3. 修正后的代码示例

以下是根据上述说明修正后的J*aScript TUS上传代码示例:

// 确保您已经引入了TUS客户端库和SHA256哈希库
// 例如:
// <script src="https://cdn.jsdelivr.net/npm/tus-js-client@latest/dist/tus.min.js"></script>
// <script src="https://cdnjs.cloudflare.com/ajax/libs/js-sha256/0.9.0/sha256.min.js"></script>

// TODO: 请替换为您的实际BunnyCDN API密钥和视频库ID
const YOUR_BUNNYCDN_API_KEY = "YOUR_BUNNYCDN_API_KEY_HERE"; // 例如:'YOUR_API_KEY'
const YOUR_VIDEO_LIBRARY_ID = "YOUR_VIDEO_LIBRARY_ID_HERE"; // 例如:12345

/**
 * 上传视频到BunnyStream服务
 * @param {File} file - 要上传的File对象
 * @param {object} videoDetails - 包含视频GUID的对象,例如 { guid: "pre-created-video-guid" }
 * @param {string} [collectionId] - 可选,视频所属的集合ID
 * @param {string} [libraryID] - 可选,覆盖默认的视频库ID
 */
function UploadVideo(file, videoDetails, collectionId, libraryID){
    // 使用传入的libraryID或默认值
    const currentLibraryID = libraryID || YOUR_VIDEO_LIBRARY_ID;

    // 1. 计算授权过期时间(Unix时间戳,秒)
    // 例如,设置为当前时间后的24小时
    const expirationTime = Math.floor(Date.now() / 1000) + (24 * 60 * 60);

    // 2. 获取预创建的视频GUID
    const videoGuid = videoDetails.guid;

    // 3. 生成SHA256签名
    // 签名字符串格式: library_id + api_key + expiration_time + video_id
    const signaturePayload = currentLibraryID + YOUR_BUNNYCDN_API_KEY + expirationTime + videoGuid;
    const AuthorizationSignature = sha256(signaturePayload); // 假设sha256函数已全局可用

    // 创建一个新的tus上传实例
    var upload = new tus.Upload(file, {
        endpoint: "https://www.php.cn/link/92b1f191dfce9fff64b4effd954ccaab",
        retryDelays: [0, 3000, 5000, 10000, 20000, 60000, 60000], // 重试策略
        headers: {
            // 认证相关头部
            AuthorizationSignature: AuthorizationSignature,
            AuthorizationExpire: expirationTime,
            VideoId: videoGuid,
            LibraryId: currentLibraryID,
        },
        metadata: {
            // 元数据,可选
            filetype: file.type,
            title: 'My Uploaded Video Title', // 视频标题
            collection: collectionId // 如果有集合ID,可以添加
        },
        onError: function (error) {
            console.error("TUS上传发生错误:", error);
            // 在此处处理错误,例如向用户显示错误消息
        },
        onProgress: function (bytesUploaded, bytesTotal) {
            var percentage = (bytesUploaded / bytesTotal * 100).toFixed(2);
            // 假设页面中存在一个ID为'progressBar'的元素来显示进度
            // const progressBar = document.getElementById('progressBar');
            // if (progressBar) progressBar.style.width = percentage + "%";
            console.log(`已上传: ${bytesUploaded} bytes, 总共: ${bytesTotal} bytes, 进度: ${percentage}%`);
        },
        onSuccess: () => {
            console.log('文件上传成功!');
            // 在此处处理上传成功后的逻辑
        }
    });

    // 检查是否有之前中断的上传可以继续
    upload.findPreviousUploads().then(function (previousUploads) {
        if (previousUploads.length) {
            console.log("检测到之前未完成的上传,将继续上传。");
            upload.resumeFromPreviousUpload(previousUploads[0]);
        }
        // 开始上传
        upload.start();
    }).catch(error => {
        console.error("查找或开始上传时发生错误:", error);
    });
}

// 示例用法(在实际应用中,file、videoDetails和collectionId将由用户输入或API调用提供)
/*
// 假设您有一个File对象
const myFile = new File(["dummy content"], "example.mp4", { type: "video/mp4" });
// 假设您已经通过BunnyStream API创建了一个视频并获取了其GUID
const myVideoDetails = { guid: "YOUR_PRE_CREATED_VIDEO_GUID" };
// 可选的集合ID
const myCollectionId = "YOUR_COLLECTION_ID";

// 调用上传函数
UploadVideo(myFile, myVideoDetails, myCollectionId);
*/

4. 受信任站点配置

除了正确的认证参数,BunnyCDN还提供了“受信任站点”的安全功能。如果您在本地开发环境或特定域名下进行测试,并且BunnyCDN配置了受信任站点策略,那么您需要将您的测试域名或localhost添加到BunnyCDN的受信任站点列表中。否则,即使认证参数正确,请求也可能被拒绝。

配置路径: 登录BunnyCDN控制面板 -> Stream -> 您的视频库 -> 安全 -> 受信任站点。

5. 总结与注意事项

  • API密钥的准确性: 确保使用的API密钥是正确的BunnyCDN密钥,并且拥有必要的上传权限。
  • 时间戳的动态性: AuthorizationExpire必须是一个未来的Unix时间戳,并且在签名生成和请求头中保持一致。
  • 签名字符串的精确性: SHA256签名必须严格按照library_id + api_key + expiration_time + video_id的顺序和内容生成。任何字符或顺序的错误都会导致签名无效。
  • 预创建视频: TUS上传前必须先通过BunnyStream API预创建一个视频占位符,以获取VideoId。
  • 受信任站点: 根据您的环境配置BunnyCDN的受信任站点列表。
  • 错误日志: 仔细检查浏览器的开发者工具控制台,TUS库的onError回调会提供详细的错误信息,有助于进一步排查问题。

通过遵循上述指南,您应该能够成功解决BunnyStream TUS视频上传的401认证错误,并顺利完成视频上传任务。

以上就是解决BunnyStream TUS视频上传401认证错误:完整指南的详细内容,更多请关注其它相关文章!


# java  # js  # ajax  # npm  # javascript  # 您在  # 如何实现  # 可选  # 您的  # 上传  # stream  # unix  # ai  # 工具  # access  # 浏览器  # cdn  # 您已经  # seo5g  # 微信里的seo  # 姚玉兰seo  # 平谷区自动网站建设配置  # 海口自建网站推广公司  # 山西电商网站推广销售  # 美国购物推广网站排名  # 您需要  # 您可以  # 创建一个  # 是一个  # sem与seo 推广  # 百度关键词排名策略  # 为什么要做营销推广呢 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  黑猫投诉统一入口官网 消费者权益保护投诉平台  抖音怎么赚钱_抖音创作者变现方法与途径指南  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  b站怎么删除评论_b站评论管理与删除操作  Win11怎么开启省电模式_Win11电池节电模式自动开启  Lar*el 8 多关键词数据库搜索优化实践  Mac怎么查看崩溃日志_Mac控制台错误报告分析  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  星露谷物语官网入口 星露谷物语游戏官网入口  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  Pandas DataFrame:高效添加条件计算列  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  理解Python模块与全局变量的作用域管理  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  AngularJS $http POST请求数据传递与Go后端接收实践  邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  12306几点到几点不能订票? | 官方最新系统维护时间全解析  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  Selenium Python中处理点击后新窗口加载冻结问题的策略与实践  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  一加 14R 快充无反应_一加 14R 充电优化  12306选座系统怎么选连座_12306选座多人连坐操作方法  汽水音乐在线版入口_汽水音乐网页播放手册  TikTok网页版直接登录 TikTok网页端官方平台入口  《主播少女的秘密账号迷宫》首支宣传片  c++如何使用Meson构建系统_c++比CMake更快的构建工具  Steam官网入口直达 Steam注册及登录步骤  AO3中文官网链接_AO3网页版稳定镜像站  如何在Promise链中有效终止错误处理后的执行  必由学官网首页入口 必由学教师网页版登录指南  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  如何使用Go和Martini动态服务解码后的图片  抖音极速版最新版本 抖音极速版官方下载地址  Linux如何排查内存不足OOME问题_LinuxOOM分析教程  4399网页游戏电脑版全新入口 4399电脑端在线玩指南  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  Golang如何使用context实现超时取消_Golang context超时取消模式实践  Log4j Console Appender性能瓶颈与高并发优化策略  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  解决Django多数据库/多Schema环境下外键迁移问题  PHP 枚举:根据字符串获取枚举案例的策略与实现  响应式容器内容自动缩放与宽高比维持教程  mc.js官网登录入口 mc.js官方登录入口最新版 

搜索