我正在尝试使用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复制) (我很难找到关于这个主题的文献)
那么,这样做的方法是什么?
答案 0 :(得分:2)
第一种方法(包中文件的XMLHttpRequest
)完全有效,如果您只需要整个文件,则可能更容易。
你所谓的“第二种方法”取决于关于实例化File
对象的问题,而不是读取实际文件。这不允许您读取现有文件,只需创建一个可以在DOM表单中使用的“虚拟”文件。
整个HTML FileSystem
API,除了Chrome之外没有任何实现,因此文档很少,并且充满了可怕的红色警告。你可以实际使用它来达到你陈述的目的 - 阅读App自己的文件 - 从chrome.runtime.getPackageDirectoryEntry
开始,但这在你的特定情况下可能有点过分,你会很难过找到这样做的例子。
我可以想到只有两个理由来扰乱野兽的沉睡,即FileSystem
API的App自己的文件:
请注意,FileSystem
API主要用于Chrome chrome.fileSystem
Apps API。考虑到Chrome会在Chrome OS上支持Chrome应用程序一段时间,但它可能会保留,尽管它不符合标准。
幸存文件:
File
API的实际标准文档(您的“第二个示例”包含在内):File API