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