android - Ionic 3 在 Android 中将 URL 读取为 base64

标签 android ionic-framework ionic3 cordova-plugins

我正在使用 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/

相关文章:

android - 如何在android中获取设备制造商 keystore 证书

html - 如何在 Ionic 的正中心制作带有图像和文本的 div?

javascript - 如何添加 checkin 数组的对象?

angular - Ionic 3 项目和 base64 图像中 http post 中的数据参数

angular - 我可以共享一个用于 Web 和 Ionic 的 Angular 项目吗?

android - Firebase Crashlytics 不报告崩溃

android - 使用 WRAP_CONTENT LayoutParams 使 TextView 文本适合一行

android - 如何在 ionnic 和 android 上使用 websockets?

angular - 如何在没有 *ngIf 的情况下渲染 ng-container 或 ng-template?

Android:无法解析 appcompat-v7 主题