使用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
相关产品推荐
相关产品推荐

