我已经编写了这个函数来尝试读取与我的Javascript文件和index.html文件位于同一目录中的文件。我以前从文件中读过,但通常我让用户自己选择文件,所以我从来不必创建实际的文件对象。
有谁知道为什么下面的代码不起作用?
function getFile()
{
var reader=new FileReader();
var file=new File("input.txt");
var str=reader.result;
reader.readAsText(file);
return str;
}
更新
一些额外的信息(如果我不回答您的问题,我很抱歉,我对此非常陌生,我所知道的一切都是自学成才的。)
服务器端还是客户端?我认为这将是托管服务器端 - 我有一个域名,我将上传文件。
答案 0 :(得分:0)
由于安全限制,不可能。您必须使用用户选择的文件。想象一下,如果javascript可以读取硬盘上的任何文件会发生什么 - 噩梦!
答案 1 :(得分:0)
我有一个用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字符串时。但我希望您能了解如何在现代浏览器上存储本地数据。
答案 2 :(得分:0)
使用File()
构造函数,您只能创建新的文件对象,但无法从lokal磁盘读取文件。
目前尚不清楚您想要实现的目标。 你说,input.txt与你的html和js位于同一个目录中。因此它位于服务器上。
如果要从服务器读取文件,则必须使用ajax question中已解释的ajax请求。