You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tus向BunnyStream上传视频时出现401错误,寻求技术帮助

BunnyStream TUS上传视频401错误排查

参考BunnyStream API文档中的TUS上传视频JavaScript示例,替换自身数据后,控制台出现如下401授权错误:

Error: tus: unexpected response while creating upload, originated from request (method: POST, url: https://video.bunnycdn.com/tusupload, response code: 401, response text: , request id: n/a)

以下是我编写的代码:

function UploadVideo(file, json, collectionId, libraryID){
    const presigned_signature = sha256(libraryID + AccessKey + 1234567890 + json.guid);

    // Create a new tus upload
    var upload = new tus.Upload(file, {
        endpoint: "https://video.bunnycdn.com/tusupload",
        retryDelays: [0, 3000, 5000, 10000, 20000, 60000, 60000],
        headers: {
            AuthorizationSignature: presigned_signature, // SHA256 signature (library_id + api_key + expiration_time + video_id)
            AuthorizationExpire: 1234567890, // Expiration time as in the signature,
            VideoId: json.guid, // The guid of a previously created video object through the Create Video API call
            LibraryId: libraryID,
        },
        metadata: {
            filetype: file.type,
            title: 'Video 4st Test from JS',
            collection: collectionId
        },
        onError: function (error) { console.log(error)},
    onProgress: function (bytesUploaded, bytesTotal) { 
        var percentage = (bytesUploaded / bytesTotal * 100).toFixed(2);
        progressBar.style.width = percentage + "%";
        console.log(bytesUploaded, bytesTotal, percentage + "%");
    },   
    onSuccess: () =>  {console.log('file uploaded successfully!')}
    })

    // Check if there are any previous uploads to continue.
    upload.findPreviousUploads().then(function (previousUploads) {
        // Found previous uploads so we select the first one. 
        if (previousUploads.length) {
            upload.resumeFromPreviousUpload(previousUploads[0])
        }

        // Start the upload
        upload.start()
    })
}

已引入tus和sha256的CDN。


可能的错误原因及解决方法:

  • 签名算法错误:BunnyStream要求使用HMAC-SHA256生成签名,而非普通SHA256哈希。很多公开的sha256工具是普通哈希,需要改用HMAC算法,以AccessKey作为密钥,按libraryID + AccessKey + AuthorizationExpire + VideoId的顺序拼接字符串后加密。
  • 过期时间无效:代码中写死的1234567890是2009年的时间戳,属于过去的时间,必须生成未来的时间戳(比如当前时间+3600秒,即1小时有效期),且签名中的过期时间必须和请求头AuthorizationExpire的值完全一致。
  • VideoId无效:确认json.guid是通过Create Video API成功创建的有效视频GUID,且该视频属于当前传入的libraryID,没有拼写或大小写错误。
  • 密钥与库ID不匹配:检查AccessKey是否为BunnyStream的正确API密钥(避免混淆其他服务密钥),libraryID是否与视频所属的库ID完全匹配;注意不要在前端代码中直接暴露AccessKey,建议后端生成签名后传给前端使用。
  • 请求头大小写错误:BunnyStream API对请求头名称大小写敏感,确保AuthorizationSignature、AuthorizationExpire、VideoId、LibraryId的拼写和大小写完全符合文档要求。

内容的提问来源于stack exchange,提问作者Mohamed Amr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:07:19