0

我正在编写一个 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,因为创建的大小与文件的实际大小不同。我怎样才能上传它?

4

0 回答 0