javascript - 文件错误{代码: 5} trying to use absolute file paths with Meteor 1. 4 Cordova

标签 javascript android cordova meteor

我正在尝试将 Meteor 1.4 与 Cordova(移动支持)结合使用来读取 Android 手机上的文件。

我有一个小Meteor app在我的手机上运行(通过 meteor run android-device)。我还使用 adb shellrun-as 在应用程序的私有(private)存储中创建了一个小文本文件。 .

如果我调用 getFile('a'),我可以读取该文件,但我找不到任何使用 cordova.file.dataDirectory 的方法(即使使用WebAppLocalServer.localFileSystemUrl) 为 recommended in the Meteor guide 。我收到 FileError {code: 5} ( ENCODING_ERR )。

这是当我单击 my app 中的按钮时 Chrome 检查器的 JS 控制台输出:

meteor app in chrome inspector throwing FileError code 5

  • 此重现在 Android 5 和 6 上进行。
  • 我的开发环境是 64 位 Ubuntu 14.04 LTS。
  • 我的应用程序的应用程序信息报告它具有以下权限:
    • 修改或删除 SD 卡的内容
    • 读取 SD 卡的内容
  • 该应用使用 cordova file plugin version 4.2.0 .
  • 重复? How to read/write a file in Meteor-Cordova?
  • 确实可以通过 USB 调试在 chrome://inspect 控制台中工作:HTTP.call('GET', 'http://localhost: 12640/local-filesystem/data/user/0/com.adammonsen.app/files/a', {}, 函数 (e,r) {console.error(e); console.log(r)});
    • 输出是对象{statusCode:200,内容:“在外部目录↵”,标题:对象,数据:null}

最佳答案

明白了。诀窍是使用 window.resolveLocalFileSystemURL() 来获取文件系统。以下是如何获取外部存储上的文件。我最初的问题是关于应用程序私有(private)存储。如果您正在寻找该目录,只需使用 cordova.file.dataDirectory 而不是 cordova.file.externalDataDirectory

function reportError(err) {
  console.error(err);
}

function readFile(file) {
  var reader = new FileReader();
  reader.onloadend = function() {
    console.log('read file! contents: ' + this.result);
  };
  reader.readAsText(file);
}

function processFileEntry(fileEntry) {
  fileEntry.file(file => {
    readFile(file);
  }, reportError);
}

Template.hello.events({
  'click button'(event, instance) {
    // increment the counter when button is clicked
    instance.counter.set(instance.counter.get() + 1);

    if (Meteor.isCordova) {
      // aaaaaand do some other stuff
      const path = cordova.file.externalDataDirectory + 'a';
      window.resolveLocalFileSystemURL(path, fileEntry => {
        console.log('fileEntry: ', fileEntry);
        processFileEntry(fileEntry);
      }, reportError);
    }
  },
});

参见https://github.com/meonkeys/cordova-file-test/tree/solution获取完整的工作示例和说明。

确保 AndroidExtraFilesystems 包含 files-external。我在我的 mobile-config.js 中使用了这一行:

App.setPreference('AndroidExtraFilesystems', 'files,files-external');

我很想了解 API 之间的区别,但现在我很高兴找到了可靠的东西。

关于javascript - 文件错误{代码: 5} trying to use absolute file paths with Meteor 1. 4 Cordova ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38800845/

相关文章:

java - Android 通过图库 Intent 选择的相机图像未显示在 imageview 中

android - 在 Phonegap Android 应用程序中安装 FacebookConnect 插件时出错

javascript - 跨浏览器隐藏鼠标光标

javascript - 未将日期时间值设置为 Bootstrap DatetimePicker

javascript - 通过方法动态改变元素数据

javascript - 从父组件状态传递时,react prop 未在正确的时间更新

android - 如何使用 glide 库在 recyclerview 中加载更新图像而不是旧图像

android - 在android中的 View 中插入一个 View

javascript - Phonegap - 相机拍摄的照片总是变成风景

javascript - ionic 将输入保存为变量