Проверьте, существует ли файл локально, только используя JavaScript
Я хочу проверить, существует ли файл локально, где находится файл HTML. Это должен быть JavaScript. JavaScript никогда не будет отключен. jQuery не хорош, но может сделать.
Кстати, я делаю приложение titanium для Mac, поэтому я ищу способ защитить свои файлы от людей, которые нажимают "показать содержимое пакета".
Ответы
Ответ 1
Ваш вопрос неоднозначен, поэтому есть несколько возможных ответов в зависимости от того, чего вы действительно пытаетесь достичь.
Если вы разрабатываете, поскольку я предполагаю настольное приложение с использованием Titanium, вы можете использовать модуль getFile для FileSystem для получения файла-объекта, а затем проверить, существует ли он с помощью метода exist.
Вот пример, взятый с веб-сайта 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
И существует справочная документация методов
Для тех, кто думал, что он спрашивает о обычной ситуации с веб-разработкой, вот два ответа, которые я дал бы:
1) вы хотите проверить, существует ли файл на стороне сервера.
В этом случае вы можете использовать запрос ajax try и получить файл и отреагировать на полученный ответ. Несмотря на это, имейте в виду, что вы можете проверять только файлы, которые отображаются на вашем веб-сервере. Лучшим подходом было бы написать серверную часть script (например, php), которая проведет проверку для вас, задав имя файла и вызовет script через ajax. Кроме того, имейте в виду, что вы можете очень легко создать отверстие безопасности в своем приложении/сервере, если вы недостаточно осторожны.
2) вы хотите проверить, существует ли клиентский файл.
В этом случае, как указывали другие пользователи, это запрещено по соображениям безопасности (хотя IE разрешал это в прошлом через ActiveX и класс Scripting.FileSystemObject), и это прекрасно, как это (никто не хочет, чтобы вы могли пройти через их файлы), поэтому забудьте об этом.
Ответ 2
Поскольку "Kranu" помогает, советует "Единственное взаимодействие с файловой системой - загрузка js файлов.,. ', который предлагает сделать это с проверкой ошибок, по крайней мере, скажет вам, если файл не существует - чего может быть достаточно для ваших целей?
На машине локальная вы можете проверить, не существует ли файл , пытаясь загрузить его как внешний script, а затем проверить наличие ошибки. Например:
<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 не может быть передан.
- помните, что это проверяет, существует ли файл .
Ответ 3
Вы можете использовать этот
function LinkCheck(url)
{
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
Ответ 4
Javascript не может получить доступ к файловой системе и проверить наличие. Единственное взаимодействие с файловой системой - загрузка js файлов и изображений (png/gif/etc).
Javascript не является задачей для этого
Ответ 5
Если вы хотите проверить, существует ли файл с помощью javascript, то нет, насколько я знаю, javascript не имеет доступа к файловой системе из-за соображений безопасности..
Но что касается меня, недостаточно ясно, что вы пытаетесь сделать.
Ответ 6
К счастью, невозможно (по соображениям безопасности) получить доступ к клиентской файловой системе со стандартным JS. Существуют некоторые проприетарные решения (например, компонент ActiveX, поддерживающий только IE).
Ответ 7
Альтернатива:
вы можете использовать "скрытый" элемент апплета, который реализует эту существующую проверку с использованием объекта привилегированного действия и переопределяет ваш метод запуска с помощью:
File file = new File(yourPath);
return file.exists();
Ответ 8
Один из способов, который я нашел для этого, - создать тэг img и установить атрибут src в файл, который вы ищете. Onload или onerror элемента img будут срабатывать в зависимости от того, существует ли файл. Вы не можете загружать данные с помощью этого метода, но вы можете определить, существует ли какой-либо конкретный файл.
Ответ 9
Попробуйте следующее:
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
}
}
});