需要帮助阅读位于同一目录中的Javascript中的文件

时间:2015-06-06 21:37:29

标签: javascript html file blob filereader

我已经编写了这个函数来尝试读取与我的Javascript文件和index.html文件位于同一目录中的文件。我以前从文件中读过,但通常我让用户自己选择文件,所以我从来不必创建实际的文件对象。

有谁知道为什么下面的代码不起作用?

  function getFile()
  {
    var reader=new FileReader();
    var file=new File("input.txt");
    var str=reader.result;
    reader.readAsText(file);
    return str;
  }

更新

一些额外的信息(如果我不回答您的问题,我很抱歉,我对此非常陌生,我所知道的一切都是自学成才的。)

服务器端还是客户端?我认为这将是托管服务器端 - 我有一个域名,我将上传文件。

3 个答案:

答案 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请求。