【问题标题】:Need help reading a file in Javascript located in the same directory需要帮助阅读位于同一目录中的 Javascript 文件
【发布时间】:2015-08-21 15:50:39
【问题描述】:

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

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

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

更新:

一些额外的信息(如果我没有回答你的问题,我很抱歉,我真的很陌生,我所知道的一切都是自学的)。

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

【问题讨论】:

  • 好吧,如果这个 javascript 在客户端运行,那么你不能这样做。
  • 疑问:有服务器吗?还是打算从驱动器运行?请附上上下文,以便我们为您提供帮助。
  • 请说明您是在尝试读取客户端还是服务器端的文件。见:What is the difference between client-side and server-side programming?
  • 根据您的更新信息,很明显您必须从服务器获取文件。因此您必须使用 ajax 请求。见我的answer

标签: javascript html file blob filereader


【解决方案1】:

由于安全限制,不可能。您必须使用用户选择的文件。想象一下,如果 javascript 可以读取您硬盘上的任何文件会发生什么 - 噩梦!

【讨论】:

    【解决方案2】:

    我有一个用 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 字符串时。但我希望您了解如何在现代浏览器上存储本地数据。

    【讨论】:

      【解决方案3】:

      使用File() 构造函数,您只能创建新文件对象,但不能从本地磁盘读取文件。

      目前还不清楚您到底想要实现什么。 您说,input.txt 与您的 html 和 js 位于同一目录中。因此它位于服务器上。

      如果你想从服务器读取文件,你必须使用 ajax 请求,这已经在另一个 question 中解释过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 2017-10-02
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        相关资源
        最近更新 更多