21

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

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

4

9 回答 9

14

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

如果您正在开发,因为我猜想使用 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 方法参考文档

exists方法参考文档

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

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

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

于 2011-02-25T09:33:45.537 回答
11

由于“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 参数。
  • 请记住,这仅检查文件是否不存在。
于 2011-04-27T07:33:18.413 回答
8

你可以用这个

function LinkCheck(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}
于 2014-01-31T09:55:17.560 回答
4

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

Javascript 不是这个任务

于 2011-02-25T08:45:07.193 回答
3

如果你想使用 javascript 检查文件是否存在,那么不,据我所知,由于安全原因,javascript 无法访问文件系统。但对我来说,你想做什么还不够清楚。

于 2011-02-25T08:43:12.990 回答
3

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

于 2011-02-25T08:47:40.347 回答
2

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

File file = new File(yourPath);
return file.exists();
于 2013-03-15T11:13:28.553 回答
1

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

于 2016-08-02T23:11:16.190 回答
1

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

const path = './file.txt'

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

  //file exists
})
于 2020-02-15T15:57:57.030 回答