Ionic window.resolveLocalFileSystemURL不适用于jpgs

时间:2017-07-27 00:38:48

标签: cordova ionic3

我正在使用图库访问要上传的图片。当我直接上传图像uri时,我没有遇到任何麻烦,但是当我需要使用fileEntry(用于多部分上传)时,jpgs没有从他们的uri返回fileEntry。 注意:我使用async:await,但我对标准承诺有同样的问题

例如,以下是我用来获取图像的代码uri

var imageUri = await this.takePicture(Object.assign(this.defaultOptions,{sourceType:this.camera.PictureSourceType.SAVEDPHOTOALBUM}));
let newFile = new File([imageUri], "filename");
this.uploadFile(newFile);

以下是返回imageUri的takePicture()代码

try{
  return await this.camera.getPicture(options);
}catch(err){
  ...handle error
}

成功上面的代码上传了pngjpg个文件。

以下代码无法仅检索jpg个文件的fileEntry。

    /**
   * Returns a file entry for the image uri provided
   * @param imgUri image Uri to get file entry for
   */
  private async getFileFromImageUri(imgUri){ 
    try{
      var fileEntry = await this.resolveFileAsPromise(imgUri);
    }catch(err){
      // fileEntry = await this.createNewFileEntry(imgUri);
      this.presentToast('Error while selecting image.');  //TODO: images that are .jpg seem to have trouble being resolved to a file.
    }
    return fileEntry;      
  }

resolveFileAsPromise(ImgUri);window.resolveLocalFileSystemURL(imgUri, resolve, reject);的承诺包装器,它返回以下错误

FileError {code: 5}仅适用于jpgs。错误代码意味着jpg格式有问题?这对我来说没有意义,因为所有这些都是在内部处理的。图像没有损坏或任何东西,所以它让我相信可能错误代码是误导? error code docs

有没有人遇到过这个问题?我正在测试一个实时的Android设备(而不是模拟器)。

我觉得上面的内容表明图像uri不是问题,因为当我不需要访问fileEntry时,它可以上传图像。但是,当我这样做时,它仅适用于特定的文件类型png

1 个答案:

答案 0 :(得分:0)

这解决了问题

var imageUri = await this.camera.getPicture(options);
#FIX
if(this.platform.is('android') && !imageUri.includes("file://")) {
    imageUri = `file://${imageUri}`;
}
var fileEntry = await this.resolveFileAsPromise(imgUri);

问题似乎是因为某些原因在Android上,相机库不会返回带有完整file://路径的jpgs,这是Cordova File插件所需要的。

如果需要做的只是前置file://,那我就会想知道为什么jpgs还没有发生这种情况。特别是因为它正在为pngs正确地工作/返回文件路径。

此外,cordova返回错误代码5是欺骗,因为它似乎表明正在引用的文件存在问题,而不是路径。