Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅使用JavaScript检查本地是否存在文件_Javascript_Html_Security_Titanium_Local Files - Fatal编程技术网

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

仅使用JavaScript检查本地是否存在文件,javascript,html,security,titanium,local-files,Javascript,Html,Security,Titanium,Local Files,我想检查HTML文件所在的本地是否存在文件。它必须是JavaScript。JavaScript永远不会被禁用。jQuery不好,但可以 顺便说一句,我正在为Mac制作一个钛合金应用程序,因此我正在寻找一种方法来保护我的文件不受点击“显示软件包内容”的人的攻击。如果你想使用javascript检查文件是否存在,那么就我所知,javascript由于安全原因无法访问文件系统。。 但对我来说,你想做什么还不够清楚。Javascript无法访问文件系统并检查是否存在。与文件系统的唯一交互是加载js文件和

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


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

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

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


Javascript不是此任务的任务

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

你的问题模棱两可,因此有多种可能的答案,这取决于你真正想要实现的目标

如果您正在开发一个使用Tianium的桌面应用程序,那么您可以使用文件系统模块的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.');
    ...
}
检查

对于那些认为他是在询问一个常见的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>
文件是否存在?
函数get_错误(x){
document.getElementsByTagName('span')[0]。innerHTML+=x+“不存在。”;
}
url=“(在此处输入路径/文件名)”;
url+=“?”+新日期().getTime()+数学地板(数学随机()*1000000);
var el=document.createElement('script');
el.id=“123”;
el.onerror=function(){if(el.onerror)get_error(this.id)}
el.src=url;
文件.正文.附件(el);
一些注释

  • 将一些随机数据附加到文件名(url+=“?”+新日期等),以便浏览器缓存不会提供旧结果
  • 如果在循环中使用,请设置唯一的元素id(el.id=),以便get_error函数可以引用正确的项
  • 设置onerror(el.onerror=function)行有点复杂,因为需要它调用get_error函数并传递el.id-如果只设置了对函数的正常引用(例如:el.onerror=get_error),那么就不能传递el.id参数
  • 请记住,这仅检查文件是否不存在
另一种选择: 您可以使用“隐藏”小程序元素,该元素使用特权操作对象实现此存在检查,并通过以下方式覆盖您的运行方法:

File file = new File(yourPath);
return file.exists();
你可以用这个

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

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

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


“本地”是指在客户机上吗?也就是说,有浏览器的那个。如果是这样,答案是否定的-您没有文件访问权限。但你的意思还不清楚。你知道这有多可怕吗?我用我的电脑来做这件事,所以它不在服务器上运行。不管怎样,假设文件位于“assets/index.html”中,我想检查资产中是否存在文件。使用ajax,在这里看到我的答案:非常感谢你花时间回复,我发布这个解决方案的原因是为了其他人跟随这个线索寻找答案。坦率地说,我对那些像在这个线程中一样贡献了“it can't done”行的人感到困惑,因为这似乎是零值的。所以直到您将元素附加到文档中,错误事件才被触发?我想,人们可以在“看不见”的情况下附加它,但如果可能的话,最好根本不用附加它,它总是返回
123不存在。
,无论文件是否存在。我也试过:
url=“file://c:\\Windows\\Web\\js.js”
具有相同的结果。如何使用它来检查文件的存在?@ChetanPurohit-您可以这样称呼它:
var x=LinkCheck(“c:\\Windows\\Web\\wallper\\img1.jpg”)。然后测试val
const path = './file.txt'

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

  //file exists
})