我正在使用图库访问要上传的图片。当我直接上传图像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
}
成功上面的代码上传了png
和jpg
个文件。
以下代码无法仅检索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
。
答案 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是欺骗,因为它似乎表明正在引用的文件存在问题,而不是路径。