我已经编写了这个函数来尝试读取位于与我的Javascript文件和index.html文件相同目录中的文件。我以前读过文件,但通常我让用户自己选择文件,所以我从来没有创建实际的file对象。
有人知道为什么下面的代码不工作吗?
function getFile()
{
var reader=new FileReader();
var file=new File("input.txt");
var str=reader.result;
reader.readAsText(file);
return str;
}
更新:一些额外的信息(如果我没有回答你的问题,我很抱歉,我真的是新手,我所知道的一切都是自学的)
服务器端还是客户端?我认为这将是托管的服务器端-我有一个域名,我要上传的文件。
由于安全限制,不可能。您必须使用由用户选择的文件。想象一下,如果javascript可以读取硬盘上的任何文件会发生什么——噩梦!
我有一个用JS编写的桌面应用程序的类似代码。它在IE和FF上运行良好,直到Chrome出现(是的,这是很久以前的事了!),并开始限制沙盒。在某些时候,IE和FF也收紧了权限,该方法不再工作了(我使用了这个不再工作的代码):
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(filename);
if (file.exists())
{
inStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
inStream.init(file, 0x01, 00004, null);
sInStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
sInStream.init(inStream);
content = sInStream.read(sInStream.available());
}
} catch (ex) {
// and so on...
}
在某些时候,FF和Chrome有一些启动标志,使沙盒在某些安全限制上宽松,但最后我意识到这只是旧代码。
今天,我使用localStorage
在本地机器上存储数据。唯一的缺点是,您必须实现导入/导出功能,以便通过复制/粘贴原始文本将其移植到其他浏览器/机器。
我所做的很简单。据说数据库的最大大小约为10 MB(但已知存在偏差),并且我存储的只是一个JSON字符串:
function store(data)
{
localStorage.data = JSON.stringify(data);
}
function retrieve()
{
return JSON.parse(localStorage.data);
}
显然,这两个函数过于简化了,您需要处理边缘情况,例如没有数据存在或导入了非json字符串。但是我希望你能了解如何在现代浏览器上存储本地数据。
使用File()
构造函数,您只能创建新的文件对象,但不能从本地磁盘读取文件。
你到底想达到什么目的还不太清楚。您说,input.txt位于与html和js相同的目录中。因此它位于服务器上。
如果你想从服务器读取一个文件,你必须使用ajax请求,这已经在另一个问题中解释过了。