用于读取本地文件的Javascript,FileReader和XMLHttpRequest?

时间:2016-09-29 10:26:58

标签: javascript file google-chrome google-chrome-app filereader

我正在尝试使用javascript和谷歌Chrome应用程序阅读本地文件(我认为可能无法通过Chrome浏览器),但我看不出问题的最新方法是什么。

我可以使用以下代码阅读它:

obj.read = function() {
    return new Promise(function(resolve){
        var xmlhttp = new XMLHttpRequest();
        var file_path = 'file_name.xml';
        xmlhttp.open('GET', file_path, true);
        xmlhttp.send(null);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                let xml = xmlhttp.responseText;
                var parser = new DOMParser();
                var xmlDoc = parser.parseFromString(xml, "text/xml");
                console.log(xml);
                console.log(xmlDoc);
                resolve(xmlDoc);
            }
        }
    });
};

但是就像我应该使用像

这样的东西
var reader = new FileReader();
reader.onload = (function(theFile) {
    return function(e) {
        console.log(e.target.result);
    };
})(file_path);

var file_path = 'file_name.xml';
var file_parts = [
    new Blob(['you construct a file...'],{type: 'text/plain'}), 
    'Same way as you do with blob',
    new Uint16Array([33])
];
var file = new File(file_parts, file_path);
reader.readAsText(file);

(从https://stackoverflow.com/a/24495213/826815复制) (我很难找到关于这个主题的文献)

那么,这样做的方法是什么?

1 个答案:

答案 0 :(得分:2)

第一种方法(包中文件的XMLHttpRequest)完全有效,如果您只需要整个文件,则可能更容易。

你所谓的“第二种方法”取决于关于实例化File对象的问题,而不是读取实际文件。这不允许您读取现有文件,只需创建一个可以在DOM表单中使用的“虚拟”文件。

整个HTML FileSystem API,除了Chrome之外没有任何实现,因此文档很少,并且充满了可怕的红色警告。你可以实际使用它来达到你陈述的目的 - 阅读App自己的文件 - 从chrome.runtime.getPackageDirectoryEntry开始,但这在你的特定情况下可能有点过分,你会很难过找到这样做的例子。

我可以想到只有两个理由来扰乱野兽的沉睡,即FileSystem API的App自己的文件:

  1. 您不知道在运行时包含哪些文件。然后你可以use it to list files。很少见,但可能。
  2. 你需要一个比“让我得到整个东西”更细粒度的访问,例如你只需要一大块文件。
  3. 请注意,FileSystem API主要用于Chrome chrome.fileSystem Apps API。考虑到Chrome会在Chrome OS上支持Chrome应用程序一段时间,但它可能会保留,尽管它不符合标准。

    幸存文件: