我正在编写一个 lambda 函数来下载缩放记录并将其上传到 Vimeo (API)。由于最大正文大小为 6 MB,我需要将视频切片并上传,但我不知道什么变量类型可以做到这一点。
Blob 在节点中不可用。
我尝试按原样(字符串)获取 response.data 并上传,但长度与字节大小不匹配。
我厌倦了 Buffer.from(data),但它也有同样的问题。
这是代码:
//file has 209MB
var {data} = await axios.get(file.download_url+'?access_token='+zoom_token);
console.log(data.length) //154M
var video = Buffer.from(data,"binary")
console.log(video.byteLength); //154MB
var video_url = uploadVimeo(video, `video_title`);
async function uploadVimeo(video, name){
var length = video.length; //154MB
var body = {
name: name,
"upload": {
"approach": "tus",
"size": length
}
};
try{
//create video:
var response = await axios.post("https://api.vimeo.com/me/videos", body,vimeo_options);
var data = response.data;
var link = data.upload.upload_link;
var id = data.uri.split("videos/")[1];
var options = {
headers:{
"Content-Type": "application/offset+octet-stream",
"Authorization": "Bearer "+vimeo_token,
"Upload-Offset": "0",
"Tus-Resumable":"1.0.0",
"Accept":"application/vnd.vimeo.*+json;version=3.4"
}
};
var offset = 0;
while(offset<length){
var batch = video.slice(offset,offset+6000000);
console.log(`${offset}-${batch.length+offset}`)
response = await axios.patch(link, batch, options);
offset = parseInt(response.headers["upload-offset"]);
options.headers["Upload-Offset"] = offset;
console.log(offset)
};
console.log("Upload ended.");
return id;
}catch(e){
console.log(e.response.data);
return null;
}
}
该视频不适用于 Vimeo,因为创建的大小与文件的实际大小不同。我怎样才能上传它?