我正在使用 Ionic 3 Camera 和 File 插件来处理来自用户的 Android 图库应用的图像选择。该插件返回一个文件 uri,我想用它来使用 File 插件提取 base64 编码的图像,但是当我尝试从缓存目录中读取文件时,我得到了一个 NOT_FOUND_ERR。这是我的代码示例和一些日志输出:
this.camera.getPicture(this.getCameraOptionsForPhotoLibrary()).then((fileUri: string) => {
const fileNameIndex: number = fileUri.lastIndexOf('/') + 1;
// file:///storage/emulated/0/Android/data/com.myDomain.myApp/cache/
const cacheDirectoryFromFileUri = fileUri.substring(0, fileNameIndex );
// FB_IMG_1532921240445.jpg?1532982282636
const fileName = fileUri.substring(fileNameIndex);
this.file.readAsDataURL(cacheDirectoryFromFileUri, fileName).then(base64 => {
alert('base64 cacheDirectoryFromFileUri success: ' + JSON.stringify(base64));
}, err => {
alert('base64 cacheDirectoryFromFileUri err: ' + JSON.stringify(err));
});
请告诉我,我可以提供任何更多信息来帮助解决问题。
最佳答案
在尝试重现您的错误时,我没有收到 NOT_FOUND_ERR。
虽然,这个代码块
this.camera.getPicture(this.getCameraOptionsForPhotoLibrary()).then((fileUri: string) => {
const fileNameIndex: number = fileUri.lastIndexOf('/') + 1;
// file:///storage/emulated/0/Android/data/com.myDomain.myApp/cache/
const cacheDirectoryFromFileUri = fileUri.substring(0, fileNameIndex );
// FB_IMG_1532921240445.jpg?1532982282636
const fileName = fileUri.substring(fileNameIndex);
this.file.readAsDataURL(cacheDirectoryFromFileUri, fileName).then(base64 => {
alert('base64 cacheDirectoryFromFileUri success: ' + JSON.stringify(base64));
}, err => {
alert('base64 cacheDirectoryFromFileUri err: ' + JSON.stringify(err));
});
}
给我这个错误
base64 cacheDirectoryFromFileUri err: {"code":5,"message":"ENCODING_ERR"}
我正在使用这些选项
{
quality: 100,
destinationType: this.camera.DestinationType.FILE_URI,
encodingType: this.camera.EncodingType.JPEG,
mediaType: this.camera.MediaType.ALLMEDIA,
sourceType: this.camera.PictureSourceType.PHOTOLIBRARY
}
下面一行
const cacheDirectoryFromFileUri = fileUri.substring(0, fileNameIndex );
给我这样的东西
/storage/emulated/0/WhatsApp/Media/WhatsApp Images/
将该行更改为以下内容
const cacheDirectoryFromFileUri = 'file://'+fileUri.substring(0, fileNameIndex );
解决了问题。
或者,如果您在从相机拍摄图像后尝试从缓存中获取图像,并且想要获取 base64 编码的字符串,则可以使用 Camera.DestinationType : DATA_URL
destinationType: this.camera.DestinationType.DATA_URL
关于android - Ionic 3 在 Android 中将 URL 读取为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51601839/