如何获取fileEntry然后在cordova / ionic(2)中使用readAsText?

时间:2016-09-14 15:21:12

标签: cordova-plugins ionic2

在我的Ionic2应用程序中,我设法成功使用了File插件的某些方法,例如:

  • checkDir
  • createDir
  • CREATEFILE

现在我想使用 readAsText (如指定的in the docs)但我无法弄清如何在不创建新文件的情况下获取fileEntry(显然会需要覆盖它)?

2 个答案:

答案 0 :(得分:1)

如果您知道文件的路径,则使用readAsText()函数的示例如下:

const fs:string = cordova.file.externalRootDirectory;

File.readAsText(fs, filePath).then((contents) => {
    if(typeof contents == 'string'){
        processFile(contents);
    }
});

一个轻微的 gotcha 是文件路径不能以/开头。

这可能会抓住你的一个例子是处理目录中的文件;

const fs:string = cordova.file.externalRootDirectory;

File.listDir(fs, "").then(files => {      
    for (let file of files){
        if(file.name.toLowerCase().endsWith(".csv")){  
            File.readAsText(fs, file.fullPath.substr(1)).then((contents) => {
                if(typeof contents == 'string'){
                    processFile(contents);
                }
            });
        }
    }
});

答案 1 :(得分:1)

您可以使用cordova-plugin-filepath

获取fileEntry

如果您的URI以" content:// "开头,我们需要以"文件://&...开头的本地文件URI #34;

FilePath.resolveNativePath 返回本地文件网址。

let uri = "content://com.android.externalstorage.documents/document/primary/data...";

window.FilePath.resolveNativePath(uri, (localFileUri) => {
   // result is file:///storage/emulated/0/Android/data/...
   // now get a fileEntry from this uri
   window.resolveLocalFileSystemURL(localFileUri, (fileEntry) => {

   });
});

文件输入,有一个方法" file"可以用来获取文件对象并使用FileReader读取文件的内容,例如:

fileEntry.file((file) => {
    var reader = new FileReader();
    reader.onloadend = (e) => {
       let result =  e.target.result; // text content of the file
       // do whatever you like 
    };
reader.readAsText(file);