【问题标题】:Ionic Cordova FileUpload error: Not allowed to load local resourceIonic Cordova FileUpload 错误:不允许加载本地资源
【发布时间】:2016-05-07 16:04:56
【问题描述】:

我是 Ionic 的新手,我正在尝试上传从相机拍摄并存储在 Android 文件系统中的图像:

var ft = new FileTransfer();
console.log('Uploading: ' + fileURL);
ft.upload(fileURL,
  encodeURI("http://192.168.192.62:3000/api/meals/picture"),
  pictureUploaded,
  function(error) {
    console.err(error);
    $ionicLoading.show({template: 'Ooops error uploading picture...'});
    setTimeout(function(){$ionicLoading.hide();}, 3000);
  },
  options);
  
var pictureUploaded = function() {
  console.log('uploaded!');
  $ionicLoading.hide();
};

fileUrl 指向一个存在的图像:file:///data/data/com.ionicframework.nutrilifemobile664547/files/Q2AtO1462636767466.jpg

在 chrome://inspect/#devices 控制台中我收到以下错误,看起来由于该错误 FileOptions 也没有正确发送,这是错误(不允许加载本地资源):

Cordova 版本:6.1.1
离子版本:1.7.14

【问题讨论】:

  • 您可以使用任何文件浏览器查看该文件吗?在许多情况下,应用程序特定的数据在应用程序之外是不可访问的。你可以尝试存储图像 externalRootDirectory 并尝试一次吗?
  • @Marcos,你解决了这个问题吗?
  • @BohdanZ - 嗨,实际上我刚刚发现在使用 livereload 选项时会发生这种情况,即 - "ionic run android -lc" 。在这种情况下,插件看起来像是在计算机的实际文件系统而不是设备中进行搜索..所以为了避免我只是在没有 -lc 选项的情况下运行它......这不是最佳选择,我们松动了 chrome检查支持,但我找不到使用 -lc 选项绕过问题的方法。
  • @MarcosMaia 是的,我也发现了,使用了同样的解决方案,但是这个解决方案不好用。感谢您的回复。
  • 我不使用 ionic,但我仍然在使用普通 cordova 项目的 cordova android 6.3.0 中看到此错误。有什么想法吗?

标签: android cordova ionic-framework mobile


【解决方案1】:

当您对 Ionic 使用“livereload”选项时会发生这种情况。

尝试在正常模式下运行

【讨论】:

  • 如果您检查上面我的问题的 cmets,您会注意到我们已经得出结论,问题是这不是正确的答案或解决问题的方法,我想让这个工作并且仍然能够正确使用 -lc 选项和/或能够使用 chrome 检查。
【解决方案2】:

使用 ionic webview >3.x,您必须使用 convertFileSrc() 方法。 例如,如果您有一个 myURL 局部变量,例如 file:// 或 /storage。

let win: any = window; // hack ionic/angular compilator
var myURL = win.Ionic.WebView.convertFileSrc(myURL);

【讨论】:

  • 我使用的是 ionic webview 2.4.1,这个解决方案对我有用。
  • 这个解决方案在 ios 上非常适合我,我花了两天时间才得到这个答案,
【解决方案3】:

另一个可能的原因是您安装了 webview 插件(例如 https://github.com/ionic-team/cordova-plugin-ionic-webview 或只是 https://github.com/apache/cordova-plugin-wkwebview-engine)。这也不允许使用cdvfile:// 协议。

【讨论】:

  • 我认为这个答案可能适用于我。有什么办法解决?
【解决方案4】:

可能为时已晚,但是...您可以使用 File 将本机路径转换为 ​​blob,然后使用 URL.createObjectURL(blob) 将 blob 转换为 URL,并将 src 作为 src 传递/设置到您的 html 元素。这对于生产环境是不必要的,但您可以使用 -lc 进行开发。它可能有效

【讨论】:

    【解决方案5】:

    2018 年 12 月 7 日

    这是适用于 Ionic 3.9.2 应用程序的版本。

    删除最新版本的webview 然后:

    即ionic cordova plugin add cordova-plugin-ionic-webview@1.2.1

    https://github.com/ionic-team/cordova-plugin-ionic-webview/releases/tag/v1.2.1

    注意:此版本适用于 normalizeURL() 方法。

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 2016-02-19
      • 2019-02-02
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      相关资源
      最近更新 更多