2017-07-27 40 views
3

我正在使用图库访问要上传的图像。当我直接上载图像uri时,我没有任何问题,但是当我需要使用fileEntry(对于多部分上载)时,jpgs不会从它们的uri中返回fileEntry。 注:我使用异步:等待,但我有一个标准的承诺Ionic window.resolveLocalFileSystemURL不适用于jpgs

例如,以下是我使用来获取图像的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

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

上述此代码成功上传既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}只有JPG格式。错误代码意味着jpg的格式有问题吗?这对我来说没有任何意义,因为所有这些都是在内部处理的。图像没有损坏或任何东西,所以它让我相信,可能的错误代码是误导? error code docs

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

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

+0

我只在Android设备上遇到同样的问题。我认为'JPEG'不是导致问题的原因。 – JeffMinsungKim

+0

你认为问题是什么? @JeffMinsungKim – user3331142

+0

@JeffMinsungKim我找到了一个解决方案。问题是由jpgs camera.getPicture返回的路径不是完整路径(pngs返回完整路径:include'file://') – user3331142

回答

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://路径所需科尔多瓦文件插件返回的JPG文件。

如果所有需要做的事情都在file://之前,这让我想知道为什么jpgs还没有发生。尤其是因为它正在为png正确地工作/返回文件路径。

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

相关问题