Проверьте, существует ли файл локально, используя только JavaScript
Я хочу проверить, существует ли файл локально, где находится файл HTML. Это должен быть JavaScript. Язык JavaScript никогда не будет отключен. jQuery не хорош, но может сделать.
кстати, я делаю приложение titanium для Mac, поэтому я ищу способ защитить свои файлы от людей, которые нажимают "показать содержимое пакета".
9 ответов
Ваш вопрос неоднозначен, поэтому есть несколько возможных ответов в зависимости от того, что вы действительно пытаетесь достичь.
Если вы разрабатываете, как я предполагаю, настольное приложение с использованием Titanium, то вы можете использовать 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 документация
и существует метод справочной документации
для тех, кто думал, что он спрашивает о обычной ситуации веб-разработки, то thse два ответа, которые я бы дал:
1) вы хотите проверить, существует ли файл на стороне сервера. В этом случае вы можете использовать AJAX-запрос и попробуйте получить файл и отреагировать на полученный ответ. Хотя, имейте в виду, что вы можете проверить только файлы, которые предоставляется вашим веб-сервером. Лучшим подходом было бы написать сценарий на стороне сервера (например, php), который сделал бы проверку для вас, учитывая имя файла и вызов этого сценария через ajax. Кроме того, имейте в виду, что вы можете очень легко создать дыру в безопасности в своем приложении/сервере, если вы недостаточно осторожны.
2) вы хотите проверить, существует ли файл на стороне клиента. В этом случае, как указали вам другие, это не разрешено по соображениям безопасности (хотя IE разрешил это в прошлом через ActiveX и сценарий.FileSystemObject class), и это нормально (никто не хочет, чтобы вы могли просматривать свои файлы), поэтому забудьте об этом.
поскольку "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+="?"+новая дата и т. д.), Чтобы кэш браузера не служил старому результату.
- задайте уникальный идентификатор элемента (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 не является задачей для этого
к счастью, невозможно (по соображениям безопасности) получить доступ к файловой системе на стороне клиента со стандартным JS. Однако существуют некоторые проприетарные решения (например, компонент ActiveX только для IE от Microsoft).
Если вы хотите проверить, существует ли файл с помощью JavaScript, то нет, насколько я знаю, JavaScript не имеет доступа к файловой системе из-за соображений безопасности.. Но что касается меня, то недостаточно ясно, что вы пытаетесь сделать..
альтернатива: вы можете использовать "скрытый" элемент апплета, который реализует эту проверку exist-check с помощью объекта привилегированного действия и переопределить метод run:
File file = new File(yourPath);
return file.exists();
один из способов сделать это-создать тег img и установить атрибут src в файл, который вы ищете. Onload или onerror элемента img будет срабатывать в зависимости от того, существует ли файл. Вы не можете загрузить данные с помощью этого метода, но вы можете определить, существует ли определенный файл или нет.
попробуйте это:
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
}
}
});