gpt4 book ai didi

javascript - 找不到文件 - 文件系统 API,Javascript

转载 作者:行者123 更新时间:2023-11-30 12:46:09 25 4
gpt4 key购买 nike

使用本地 Apache Web 服务器进行测试,使用 Chrome (33) 和一段非常基本的代码

function onInitFs(fs) {
fs.root.getFile("productinfo.xml", {}, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(e) {
.
.
.
};
reader.readAsText(file);
}, errorHandler);
}, errorHandler);
}

window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);

无论我将文件 (productinfo.xml) 放在哪里,我都会得到:

A requested file or directory could not be found at the time an operation was processed

我的根目录是 C:\xampp\htdocs 那么把 productinfo.xml 放在那里应该可以吗?

最佳答案

正如评论所指出的,您将要进行 AJAX 调用 - 如果不从服务器获取文件,您将无法获得该文件。我不确定您是否要坚持每次都进行 AJAX 调用。但是,使用 HTML5 文件系统可以避免每次都重新获取 XML。

下面的代码/我的答案是当文件存在时在本地抓取文件,当文件不存在时从服务器抓取你的代码看起来像下面这样(或非常相似的东西- 我复制并粘贴了很多工作代码并尝试抽象一些组件):

获取xml文件的函数调用,无论是本地还是来自服务器,请参阅下面的代码 - 确保 fs 在进行以下调用之前已初始化,这是通过将其设置为 onInitFs< 中的全局变量来完成的 在请求中调用文件系统函数

getFile("productinfo.xml",function(textDataFromFile){
console.log("some callback function"}
//your ... code should be handled here
);

从服务器获取文件的 AJAX 调用

function obtainFileFromServer(filename,callback){
var xhr2 = new XMLHttpRequest();
xhr2.onload = function(e){
writeToFile(filename,xhr2.response,callback);
}
xhr2.open('GET', "path/to/"+filename, true);
xhr2.send();
}

从 HTML5 文件系统中读取。

function getFile(filename,callback){
fs.root.getFile(filename, {create:false}, function(fileEntry) {
fileEntry.file(function(file) {
var errorHandler2 = function(e){
switch(e.name){
case "NotFoundError":
//if the productinfo.xml is not found, then go get it from the server
//In you're callback you'll want to also recall the getFile
obtainFileFromServer(function(){getFile(filename,callback);});
break;
default:
console.log(e);
break;
}
}
var reader = new FileReader();
reader.onloadend = function(e) {
callback(this.result);
};
reader.readAsText(file);
}, errorHandler2);
}, errorHandler);
}

写入 HTML5 文件系统

有两种方法可以查看写入方法 (writeToFile()),如果您要替换旧文件,而新文件恰好更短,您将需要在写入之前 chop 它(您只能在打开文件后立即 chop - 因此它首先发生的原因)。这似乎超出了这个问题的范围。我包括要 chop 的代码,但不包括用于确定您是否需要重新下载示例/如果它是旧的的逻辑。

function writeToFile(filename,data,callback){
fs.root.getFile(filename, {create: true}, function(fileEntry) {
fileEntry.createWriter(function(writer) {
writer.onwriteend = function(e) {
//we've truncated the file, now write the data
writer.onwriteend = function(e){
callback();
}
var blob = new Blob([data]);
writer.write(blob);
};
writer.truncate(0);
}, errorHandler);
}, errorHandler);
}

关于javascript - 找不到文件 - 文件系统 API,Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22428296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com