无法在Ionic 2项目中使用cordova文件插件读取文件

Oll*_*H-M 1 base64 typescript cordova-plugins ionic2

我正在尝试使用Cordova文件插件来读取保存在移动设备中的图像,这样我就可以获得它的base64编码,我需要远程存储它.问题是resolveLocalFilesystemUrl()方法,它应该提供一个File Entry对象,而不是似乎返回一个Entry对象,这意味着我无法调用它上面的文件.

下面是应该获取File Entry对象的代码,以便我可以使用file方法来读取文件本身.

MediaCapture.captureImage().then((images)=>{
  self.image = images[0].localURL;
  File.resolveLocalFilesystemUrl(self.image).then((entry)=>{
    entry.file(function (file) {
      var reader = new FileReader();

      reader.onloadend = function (encodedFile) {
        var src = encodedFile.target.result;
        src = src.split("base64,");
        var contentAsBase64EncodedString = src[1];
      };
      reader.readAsDataURL(file);
    })
  }).catch((error)=>{
    console.log(error);
  })
})
Run Code Online (Sandbox Code Playgroud)

我收到以下Typescript错误,它告诉我resolveLocalFilesystemUrl()正在使用Entry对象解析,该对象没有文件方法.(插件文档说resolveLocalFilesystemUrl使用File Entry对象解析,并且这样的对象肯定有一个提供文件本身的文件方法):

Property 'file' does not exist on type 'Entry'. 
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我提供resolveLocalFilesystemUrl()的路径类型.我尝试了沿着/ var/mobile/Applications // Documents/path/to/file和cdvfile:// localhost/temporary/filename行的本地URL的完整路径 - 两者都不起作用

所以具体的问题是为什么不会解析LocalFilesystemUrl()为我提供一个文件入口对象,或者我是如何让它这样做的?更一般地说,如果上述方法不起作用,如何在Ionic 2中读取文件以便我可以获得它的base64版本.

谢谢!

Oll*_*H-M 8

我发现这个问题与Typescript有关.resolveLocalFilesystemUrl()实际上是使用File Entry对象解析的(当我传递一个本地url作为文件路径时),但Typescript认为它是一个Entry对象,并且不认为可以在其上调用file().

下面通过告诉Typescript entry对象可以是任何类型来修复问题,因此可以在其上调用任何函数或属性.

MediaCapture.captureImage().then((images)=>{
  self.image = images[0].localURL;
  File.resolveLocalFilesystemUrl(self.image).then((entry: any)=>{
    entry.file(function (file) {
      var reader = new FileReader();

      reader.onloadend = function (encodedFile: any) {
        var src = encodedFile.target.result;
        src = src.split("base64,");
        var contentAsBase64EncodedString = src[1];
      };
      reader.readAsDataURL(file);
    })
  }).catch((error)=>{
    console.log(error);
  })
})
Run Code Online (Sandbox Code Playgroud)

请注意,我还必须使用encodedFile: any以便允许调用target.resultencodedFile