再次说明:如何使用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!
....
}
}