我无法找出为什么我的代码部分无效:
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调试器,FilePath确实包含正确的字符串,但是我得到了NS_ERROR_FAILURE,根据我发现的稀疏文档,我必须认为这是一种非常愚蠢的方式来说"找不到文件"。
我发现大量其他帖子来自人们搞乱文件API,以及从mozilla文档中获取的大量片段并没有帮助我。我读到可能有其他方法来读取文件,例如通过Ajax,JQuery ...但在我走这条路之前......使用纯JavaScript实现我想要的东西真的,真的绝对不可能,如果有可能,谁能提供代码片段?
非常感谢,
阿明。
答案 0 :(得分:2)
你有“FilePath”的引用:
var file = new File("FilePath");
这意味着它将尝试使用路径“FilePath”加载文件。
很确定这就是你想要的:
var file = new File(FilePath);
另一方面,昆汀是绝对正确的。如果此代码在网页中运行,您将无法访问本地文件。
答案 1 :(得分:0)
由于您正在使用window.location.pathname
我假设您在浏览器中并希望使用该代码根据URL路径“导航”到服务器上的文件。
我认为你的整个方法都是错误的,如果有可能的话,这将是一个安全问题。
File API可以严格用于用户选择的文件,而不能用于任何文件。 MDN描述不言自明:
使用已添加到HTML5中的DOM的文件API,现在可以让Web内容要求用户选择本地文件,然后读取这些文件的内容。可以通过使用HTML元素或拖放来完成此选择。
是的,您可以在File
构造函数方法中指定任何文件的路径,但这并不意味着您可以访问任何文件。 MDN的另一部分摘录:
这仅适用于特权代码,因此Web内容无法执行此操作。这可以保护用户免受与允许Web内容自由访问其磁盘内容相关的固有安全风险。如果从非特权代码(例如Web内容)传递路径到File构造函数,则会抛出异常。
答案 2 :(得分:0)
这段代码起到了作用:
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!
....
}
}
答案 3 :(得分:0)
轻松获胜是对路径执行ajax请求...您应该拥有包含由Web服务器提供的js和文件的页面。任何其他方式都需要其他方法,如果您要从没有上传者的用户计算机获取文件或类似的任何内容将是安全漏洞