如何在javascript,Angular中获取视频文件的二进制数据

时间:2018-09-23 16:49:03

标签: javascript angular http filereader

我正在使用ionic 3平台将视频文件上传到vimeo api。我需要获取视频文件的二进制数据,并且正在使用输入类型文件元素上传。

我编写的代码如下

  videoUploadBody(videoObj) {
    const r = new FileReader();
    r.onload = function(){
        console.log("Binary data", r.result);
        return r.result;
    };
    r.readAsArrayBuffer(videoObj);
  }

这是我需要调用的函数,它应该以二进制形式返回我的视频文件。我从上面调用该函数的函数如下

 uploadVideo(videoFile, createdVideo) : Observable<any> {
    const bodyObj = this.compilerProvider.videoUploadBody(videoFile);
    return this.http.patch<Observable<any>>(createdVideo.upload.upload_link, bodyObj, this.uploadReqOpts);
  }

这里的bodyObj变量包含未定义的变量,而我的console.log是videoUploadBody函数以二进制形式提供数据。

我认为存在一些异步或承诺问题。我需要更改什么才能在uploadVideo函数中取回二进制数据?

1 个答案:

答案 0 :(得分:1)

您是正确的,因为这是一个承诺问题。在您的第一个函数中,r.onload仅在第一个函数返回后才返回,即使那样,它也只会从嵌套函数中返回。

我不会为您编写正确的代码,但是您要做的是将第一个函数的主体包装在一个可以在r.onload函数中解析的Promise中,然后第二个函数应该调用{{ 1}}上的承诺就可以兑现(提示:您需要在此处做出另一个承诺)。

MDN拥有有关.then的良好信息。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise