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

时间:2011-02-25 08:35:27

标签: javascript html security titanium local-files

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

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

10 个答案:

答案 0 :(得分:15)

你的问题含糊不清,所以根据你真正想要达到的目标,有多种可能的答案。

如果您正在开发我正在猜测使用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 method reference documentation

exists method reference documentation

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

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

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

答案 1 :(得分:10)

因为'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 + =“?”+新日期等),以便浏览器缓存不会提供旧结果。
  • 如果你在循环中使用它,则设置一个唯一的元素id(el.id =),以便get_error函数可以引用正确的项目。
  • 设置onerror(el.onerror = function)行有点复杂,因为需要它来调用get_error函数并传递el.id - 如果只是对函数的正常引用(例如:el.onerror = get_error)已设置,则不能传递el.id参数。
  • 请记住,这只会检查文件 不存在

答案 2 :(得分:8)

您可以使用此

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

答案 3 :(得分:4)

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

Javascript不是此

的任务

答案 4 :(得分:3)

如果你想用javascript检查文件是否存在那么没有,据我所知,由于安全原因,javascript无法访问文件系统。 但对我而言,你还想做什么......

答案 5 :(得分:3)

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

答案 6 :(得分:2)

替代方案: 您可以使用“隐藏”的applet元素,该元素使用特权操作对象实现此存在检查,并通过以下方式覆盖您的run方法:

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

试试这个:

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
    }
  }
});

答案 9 :(得分:0)

如果您使用Nodejs,则无需外部库,您所需要做的就是导入文件系统模块。随时编辑以下代码: const fs = require('fs')

const path = './file.txt'

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

  //file exists
})