繁体   English   中英

仅使用 JavaScript 检查本地文件是否存在

[英]Check if a file exists locally using JavaScript only

我想检查本地是否存在文件,即 HTML 文件所在的位置。 它必须是 JavaScript。 JavaScript 永远不会被禁用。 jQuery 不好但可以做。

顺便说一句,我正在为 Mac 制作一个钛应用程序,所以我正在寻找一种方法来保护我的文件免受点击“显示包内容”的人的攻击。

您的问题模棱两可,因此根据您真正想要实现的目标,有多种可能的答案。

如果您正在开发我猜测使用 Titanium 的桌面应用程序,那么您可以使用 FileSystem 模块的 getFile 来获取文件对象,然后使用 exists 方法检查它是否存在。

这是来自 Appcelerator 网站的示例:

var homeDir = Titanium.Filesystem.getUserDirectory();
var mySampleFile = Titanium.Filesystem.getFile(homeDir, 'sample.txt');

if (mySampleFile.exists()) {
    alert('A file called sample.txt already exists in your home directory.');
    ...
}

查看getFile 方法参考文档

存在方法参考文档

对于那些认为他是在询问常见的 Web 开发情况的人,以下是我给出的两个答案:

1) 您要检查服务器端文件是否存在。 在这种情况下,您可以使用 ajax 请求尝试获取文件并对收到的答案做出反应。 不过,请注意,您只能检查 Web 服务器公开的文件。 更好的方法是编写一个服务器端脚本(例如,php)来为您进行检查,给定文件名并通过 ajax 调用该脚本。 另外,请注意,如果您不够小心,很容易在应用程序/服务器中创建安全漏洞。

2) 您想检查客户端文件是否存在。 在这种情况下,正如其他人向您指出的那样,出于安全原因,这是不允许的(尽管 IE 过去通过 ActiveX 和 Scripting.FileSystemObject 类允许这样做)并且这样很好(没有人希望您能够通过他们的文件),所以忘记这一点。

由于 'Kranu' 很有帮助地建议 '与文件系统的唯一交互是加载 js 文件。 . .',这表明通过错误检查这样做至少会告诉您该文件是否存在 - 这可能足以满足您的目的?

本地机器上,您可以通过尝试将文件作为外部脚本加载然后检查错误来检查文件是否不存在 例如:

<span>File exists? </span>
<SCRIPT>
    function get_error(x){
        document.getElementsByTagName('span')[0].innerHTML+=x+" does not exist.";
    }
    url="   (put your path/file name in here)    ";
    url+="?"+new Date().getTime()+Math.floor(Math.random()*1000000);
    var el=document.createElement('script');
    el.id="123";
    el.onerror=function(){if(el.onerror)get_error(this.id)}
    el.src=url;
    document.body.appendChild(el);
</SCRIPT>

一些笔记...

  • 将一些随机数据附加到文件名(url+="?"+new Date 等),以便浏览器缓存不会提供旧结果。
  • 如果您在循环中使用它,请设置一个唯一的元素 id (el.id=),以便 get_error 函数可以引用正确的项目。
  • 设置 onerror (el.onerror=function) 行有点复杂,因为需要它调用 get_error 函数并传递 el.id - 如果只是设置了对该函数的正常引用(例如:el.onerror=get_error),那么就不能传递 el.id 参数。
  • 请记住,这只检查文件是否不存在。

你可以用这个

function LinkCheck(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}

Javascript 无法访问文件系统并检查是否存在。 与文件系统的唯一交互是加载 js 文件和图像(png/gif/etc)。

Javascript 不是这个任务

如果您想使用 javascript 检查文件是否存在,那么不,据我所知,由于安全原因,javascript 无法访问文件系统。

幸运的是,使用标准 JS 访问客户端文件系统是不可能的(出于安全原因)。 虽然存在一些专有解决方案(如 Microsoft 的 IE-only ActiveX 组件)。

另一种选择:您可以使用“隐藏”小程序元素,该元素使用特权操作对象实现此存在检查,并通过以下方式覆盖您的 run 方法:

File file = new File(yourPath);
return file.exists();

我发现这样做的一种方法是创建一个 img 标记并将 src 属性设置为您要查找的文件。 img 元素的 onload 或 onerror 将根据文件是否存在触发。 您无法使用此方法加载任何数据,但您可以确定特定文件是否存在。

试试这个:

window.onclick=(function(){
  try {
    var file = window.open("file://mnt/sdcard/download/Click.ogg");
    setTimeout('file.close()', 100);
    setTimeout("alert('Audio file found. Have a nice day!');", 101);
  } catch(err) {
    var wantstodl=confirm("Warning:\n the file, Click.ogg is not found.\n do you want to download it?\n "+err.message);
    if (wantstodl) {
      window.open("https://www.dropbox.com/s/qs9v6g2vru32xoe/Click.ogg?dl=1"); //downloads the audio file
    }
  }
});

如果您使用 Nodejs,则不需要外部库,您只需导入文件系统模块。 随意编辑下面的代码: const fs = require('fs')

const path = './file.txt'

fs.access(path, fs.F_OK, (err) => {
  if (err) {
    console.error(err)
    return
  }

  //file exists
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM