【问题标题】:Ionic 3 File Permissions离子 3 文件权限
【发布时间】:2018-01-16 08:52:11
【问题描述】:

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

content://com.android.providers.media.documents/document/image%3A5744

然后应该对文件进行 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])
  })

然后我收到错误 SECURITY_ERR,the documentation 并没有真正谈论它。

这适用于我用相机拍摄的照片,它们都有这样的 url

file:///storage/emulated/0/Android/data/<appname>/cache/1502211622334.jpg

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

【问题讨论】:

    标签: android cordova ionic-framework ionic2 ionic3


    【解决方案1】:

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

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

    filePath.resolveNativePath(url)
    

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

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

    【讨论】:

    • 感谢分享您的发现!它部分对我有用,因为现在我遇到了这个错误:Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document from pid=14113, uid=10260 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
    • 您需要在我想说的清单中启用该api的权限吗?自从我接触这些东西以来已经有两年了,但我记得有一个需要编辑权限的顶级文件。
    • 感谢您的回复!如果有人需要stackoverflow.com/a/54788922/5869296,我正在尝试这个,应该是正确的轨道
    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 2020-09-06
    • 2017-04-23
    • 2015-07-19
    • 2013-10-26
    • 1970-01-01
    • 2018-07-14
    • 2023-04-02
    相关资源
    最近更新 更多