Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
再次说明:如何使用javascript读取文件_Javascript_Filereader - Fatal编程技术网

再次说明:如何使用javascript读取文件

再次说明:如何使用javascript读取文件,javascript,filereader,Javascript,Filereader,我无法找到我的代码的这一部分不起作用的原因: var loc = window.location.pathname; var dir = loc.substring(0, loc.lastIndexOf('/')); var FilePath = dir + "/" + FileName; var file = new File("FilePath"); var reader = new FileReader(); reader.onload = function(e) {FileText =

我无法找到我的代码的这一部分不起作用的原因:

var loc = window.location.pathname;
var dir = loc.substring(0, loc.lastIndexOf('/'));
var FilePath = dir + "/" + FileName;
var file = new File("FilePath");
var reader = new FileReader();
reader.onload = function(e) {FileText = reader.result;}
reader.readAsText(file); 
alert (FileText);
我认为,其目的是明确的:FilePath包含一个文件的文件名(通过参数filename传递),该文件包含日志数据(一个纯ASCII文本文件,每个日志条目一行),该文件位于与网页相同的目录(loc)中,我想将该文本嵌入代码后面的某个html文档中

由于记录的行具有不同的类型(例如错误、警告、其他blabla…),因此需要分析和处理每一行

我打算将FileText拆分为一个数组,并循环遍历它。然而,我无法让readastext开始工作。但是,根据Firefox调试器,FirePATH确实包含正确的字符串,我得到NSXError的失败,根据我所发现的稀疏文档,我必须把它看作是“文件找不到”的“愚蠢的方式”。 我发现很多其他的帖子都是来自那些乱搞文件API的人,还有很多mozilla文档中的片段,这些都对我没有帮助。我读到可能还有其他读取文件的方法,例如通过Ajax、JQuery。。。但在我走那条路之前。。。仅仅使用纯JavaScript真的、真的绝对不可能实现我想要的吗?如果可能,谁能提供代码片段

非常感谢

Armin.

您在“文件路径”周围有引号:

这意味着它将尝试加载路径为“FilePath”的文件

很确定这就是你想要的:

var file = new File(FilePath);

另一方面,昆汀是绝对正确的。如果此代码在网页中运行,您将无法访问本地文件。

因为您使用的是
window.location.pathname
我假设您在浏览器中,并且希望使用该代码根据URL路径“导航”到服务器上的文件

我认为你的整个方法都是错误的,如果有这样的可能,那将是一个安全问题

文件API可以严格用于用户选择的文件,而不是任何文件。MDN描述是不言自明的:

使用HTML5中添加到DOM中的文件API,web内容现在可以要求用户选择本地文件,然后读取这些文件的内容。此选择可以通过使用HTML元素或通过拖放来完成

是的,您可以在
file
构造函数方法中指定任何文件的路径,但这并不意味着您可以访问任何文件。MDN的另一个摘录:

这只适用于特权代码,因此web内容无法做到这一点。这可以保护用户免受与允许web内容自由访问其磁盘内容相关的固有安全风险。如果从非特权代码(如web内容)传递到文件构造函数的路径,将引发异常


这段代码成功了:

var objXMLhttp = new XMLHttpRequest()
objXMLhttp.open("GET",strFileName,true);
objXMLhttp.send();
此外,还有一个objXMLhttp.onreadystatechange=function()。。。必须实现事件处理程序,这是实际接收数据的代码,如下所示:

objXMLhttp.onreadystatechange=function()
  {
  if (objXMLhttp.readyState==4 && objXMLhttp.status==200)
    {
    var arrContents = objXMLhttp.responseText.split("\n"); // gotcha!
    ....
    }
  }

Easy win是对路径执行ajax请求……您的页面应该包含由web服务器提供服务的js和文件。任何其他方式都需要其他特权,如果您从用户计算机上获取文件而不使用上传程序或类似的东西,则会违反安全规定

您应该能够在开发人员工具中看到文件的实际请求是什么样子的。这可以帮助您调整设置文件阅读器的方式。(即,您应该看到实际请求的URL是什么,以及对此请求的响应是什么。)可能是您的浏览器没有读取文件的权限?您在哪里运行JavaScript?如果您处于特权环境中,则只能将文件路径传递给
文件
。(Ajax和File一样是普通的JS,jQuery也一样是普通的JS,因为它只是(由其他人)用JS编写的助手函数)。感谢您的澄清,但是,正如您已经预料到的,这不是问题……嗯,如果我需要通过Javascript从服务器读取文件,那么“正确”的方法是什么,如果文件位于html和js文件所在的同一目录中?@Armin如果您想从服务器读取文件并在页面中显示它(暂时不考虑
iframe
s选项),则需要使用Ajax。Ajax是“普通的JavaScript”,尽管有些库提供了帮助器功能以使其更易于使用。明白了!那就是我要找的。XMLHttpRequest对象按照我想要的方式交付了文件,抱怨很少(文件格式不好),但我还是得到了文件内容。非常感谢!
objXMLhttp.onreadystatechange=function()
  {
  if (objXMLhttp.readyState==4 && objXMLhttp.status==200)
    {
    var arrContents = objXMLhttp.responseText.split("\n"); // gotcha!
    ....
    }
  }