【问题标题】:Ionic - Ios - Cordova File Plugin - Error离子 - Ios - Cordova 文件插件 - 错误
【发布时间】:2020-12-19 18:57:10
【问题描述】:

我正在开发一款针对 iOS 和 Android 的混合应用。我必须实现一个照片上传器,所以我通过ImagePickerFile Cordova 插件实现了它。我在 Android 上测试过,一切正常。

问题是当我为 iOS 测试它时,我通过 ImagePicker 获取图像 URI,但 File 抛出以下错误:

[error] - ERROR 错误:未捕获(承诺中):
文件错误:{"code":5,"message":"ENCODING_ERR"}

我已经看到很多与此错误相关的问题,但所有这些问题都与 Android 有关,而我遇到了 iOS 问题。我知道这是一个非常复杂的问题,所以如果有人能给我任何建议,我将不胜感激。

有关该问题的更多详细信息:

this.imagePicker
  .getPictures({
      maximumImagesCount: 1,
  })
  .then(async (result : string[]) => {
      let file = 'file://' + result[0];
      let path = file.substring(0, file.lastIndexOf("/") + 1);
      this.image = await this.file.readAsDataURL(path, file): // Line which throws the exception
  });

PS:我已经尝试以我能想象到的所有方式添加“file://”=)

提前致谢

【问题讨论】:

  • 嗨,你试过打印路径吗?你用真机测试吗?
  • 是的,我打印出来了,结果如下:/var/mobile/Containers/Data/Application/45B44DDA-83F5-44AD-8060-D144031CB3CF/tmp/cdv_photo_004.jpg
  • 我不明白为什么 ImagePicker 给我一个 tmp 目录,而实际上它必须像画廊照片一样持久,不是吗?
  • 看起来这是科尔多瓦图像选择器插件问题,另一个人也报告了这个问题stackoverflow.com/questions/48380996/…

标签: ios cordova cordova-plugins ionic-native cordova-plugin-file


【解决方案1】:

感谢你们的帮助,我通过将 outputType 更改为 1 (base64 dataURL) 而不是 0 (URI) 解决了我的问题。

这是修复我的错误的代码。

this.imagePicker
    .getPictures({
      outputType: 1,
    })
    .catch((e) => alert(e))
    .then(async (results: string[]) => {
         this.image = "data:image/jpg;base64," + results[0]
      }
    });

对此的一个可能解释是 ImagePicker 正在从 ios 库目录复制到 ImagePicker 的临时目录,然后 File 试图读取这些复制的文件,但它们必须已被 iOS 文件系统删除。

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 2017-12-23
    • 2017-10-17
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多