Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FileError{code:5}尝试使用Meteor 1.4 Cordova的绝对文件路径_Javascript_Android_Cordova_Meteor - Fatal编程技术网

Javascript FileError{code:5}尝试使用Meteor 1.4 Cordova的绝对文件路径

Javascript FileError{code:5}尝试使用Meteor 1.4 Cordova的绝对文件路径,javascript,android,cordova,meteor,Javascript,Android,Cordova,Meteor,我正在尝试使用Meteor 1.4和Cordova(移动支持)在我的android手机上读取文件 我在手机上运行了一个小程序(通过meteor run android设备)。我还使用adb shell和在应用程序的私有存储中创建了一个小文本文件 如果我调用getFile('a'),我可以读取该文件,但我找不到任何方法将cordova.file.dataDirectory(即使使用WebAppLocalServer.localFileSystemUrl)用作。我得到FileError{code:5

我正在尝试使用Meteor 1.4和Cordova(移动支持)在我的android手机上读取文件

我在手机上运行了一个小程序(通过meteor run android设备)。我还使用
adb shell
和在应用程序的私有存储中创建了一个小文本文件

如果我调用
getFile('a')
,我可以读取该文件,但我找不到任何方法将
cordova.file.dataDirectory
(即使使用
WebAppLocalServer.localFileSystemUrl
)用作。我得到
FileError{code:5}
()

以下是当我单击中的按钮时Chrome inspector的JS控制台输出:

  • 这在安卓5和6上都可以复制
  • 我的开发环境是64位Ubuntu 14.04 LTS
  • 我的应用程序的应用程序信息报告它具有以下权限:
    • 修改或删除SD卡的内容
    • 阅读SD卡上的内容
  • 应用程序使用的是
  • 杜普
  • 这在
    chrome://inspect
    通过USB调试控制台:
    HTTP.call('GET','http://localhost:12640/local-filesystem/data/user/0/com.adammonsen.app/files/a',{},函数(e,r){console.error(e);console.log(r)}
    
    • 输出是
      Object{statusCode:200,content:“在外部目录中”↵", 标题:对象,数据:null}

明白了。诀窍是使用
window.resolveLocalFileSystemURL()
获取文件系统。以下是如何获取外部存储上的文件。我最初的问题是关于应用程序专用存储。如果您正在查找,请使用
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);
    }
  },
});
有关完整的工作示例和说明,请参阅

确保
AndroidExtraFilesystems
包含
外部文件
。我在我的
mobile config.js中使用了这一行:

App.setPreference('AndroidExtraFilesystems', 'files,files-external');
我很想了解API之间的区别,但现在我很高兴我找到了可靠的工作方式