离子 3 文件权限

The*_*Cog 5 android cordova ionic-framework ionic2 ionic3

好的,这就去。我正在处理一个离子项目。在这个特定场景中,我们正在处理测试应用程序的 Android 版本。我可以从文件系统中获取图像就好了,它们以字符串 url 的形式返回,看起来像这样,

content://com.android.providers.media.documents/document/image%3A5744
Run Code Online (Sandbox Code Playgroud)

然后应该对文件进行 blob 并将其向上传递的处理器如下所示:

return this.file.readAsArrayBuffer(urlData.url, urlData.fileName)
  .then((item) => {
      return new Blob([new Uint8Array(item)]);
  })
  .catch((err) => {
    console.log(err.message)
  }).then((res)=>{
    return new Blob([res])
  })
Run Code Online (Sandbox Code Playgroud)

但是后来我收到错误 SECURITY_ERR,文档并没有真正谈论它。

这适用于我用相机拍摄的照片,这些照片都有这样的网址

file:///storage/emulated/0/Android/data/<appname>/cache/1502211622334.jpg
Run Code Online (Sandbox Code Playgroud)

问题是,据我所知,没有关于导致此错误的原因的文档。我不知道要更改什么才能使我的代码正常工作。我已经使用 checkFile 方法验证了 URI 是有效的。

The*_*Cog 4

所以事实证明你不能将内容 url 与 file.readAsArrayBuffer 一起使用,而是必须首先将 url 解析为 readAsArrayBuffer 可以理解的内容。为此,我使用了ionic 本机 filePath 插件

一旦它被安装并包含在我需要它的页面中,我就使用了

filePath.resolveNativePath(url)
Run Code Online (Sandbox Code Playgroud)

方法,因为这返回一个承诺,我将我的 readAsArrayBuffer 链接到前面的 then 语句上。我确实必须使用 if 语句来为内容 url(需要resolveNativePath)和已经工作的非内容 url 提供分支路径。

据我所知,这个解决方案有效。