【问题标题】:How to read text file from sdCard on ionic2 and android 5?如何从 ionic2 和 android 5 上的 sdCard 读取文本文件?
【发布时间】:2017-03-07 20:17:20
【问题描述】:

我正在尝试打开一个文本文件并将内容放入 sqlite db。问题是我无法以任何方式读取文件。下面是我设法完成的最接近成功的地方。执行时会产生 FileError(2): "SECURITY_ERR"。

openFile(): void {
    FileChooser.open()
    .then(uri => {
      console.log(uri);
      File.resolveLocalFilesystemUrl(uri)
      .then(entry=>{
        console.log(entry);
        let path = entry.nativeURL.substring(0, entry.nativeURL.lastIndexOf('/'));
        console.log(path);
        File.readAsText(path, entry.name)
        .then(content=>{
          console.log(content);
        })
      })
      .catch(e => console.log(e));
    });
  }

在手机上,我看到该应用在 sd 卡和platform/AndroidManifest.xml 中设置了 rw 访问权限:

  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我花了很多时间在互联网上挖掘并尝试不同的解决方案,但没有成功。

编辑:

这是console.log(cordova.file); 的输出:

applicationDirectory: "file:///android_asset/"
applicationStorageDirectory: "file:///data/data/com.ionicframework.leki645195/"
cacheDirectory: "file:///data/data/com.ionicframework.leki645195/cache/"
dataDirectory: "file:///data/data/com.ionicframework.leki645195/files/"
documentsDirectory: null
externalApplicationStorageDirectory: "file:///storage/emulated/0/Android/data/com.ionicframework.leki645195/"
externalCacheDirectory: "file:///storage/emulated/0/Android/data/com.ionicframework.leki645195/cache/"
externalDataDirectory: "file:///storage/emulated/0/Android/data/com.ionicframework.leki645195/files/"
externalRootDirectory: "file:///storage/emulated/0/"
sharedDirectory: null
syncedDataDirectory: null
tempDirectory: null

【问题讨论】:

    标签: android cordova ionic-framework ionic2


    【解决方案1】:

    试试这个代码,

    openFile() {
      this.fileChooser.open()
      .then(uri => {
    
        this.file.resolveLocalFilesystemUrl(uri)
        .then(entry=>{
    
          let path = entry.nativeURL;
    
          //read file contents
          var rawFile = new XMLHttpRequest();
          rawFile.open("GET", path, false);
          rawFile.onreadystatechange = function ()
          {
              if(rawFile.readyState === 4)
              {
                  if(rawFile.status === 200 || rawFile.status == 0)
                  {
                    var fileText = rawFile.responseText;
                    alert(fileText); 
                  }
              }
          }
          rawFile.send(null);
    
        })
        .catch(e => console.log(e));
      });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 2011-04-16
      • 2012-03-04
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多