首页 > web前端 > js教程 > 正文

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

碧海醫心
发布: 2025-11-29 14:59:00
原创
969人浏览过

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

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

Skybox AI
Skybox AI

一键将涂鸦转为360°无缝环境贴图的AI神器

Skybox AI 140
查看详情 Skybox AI

注意:

  • 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. 修正后的代码示例

以下是根据上述说明修正后的JavaScript 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认证错误:完整指南的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号