Проверьте, существует ли файл локально, используя только JavaScript - PullRequest
15 голосов
/ 25 февраля 2011

Я хочу проверить, существует ли файл локально, где находится файл HTML. Это должен быть JavaScript. JavaScript никогда не будет отключен. JQuery не очень хорошо, но может сделать.

Кстати, я делаю титановое приложение для Mac, поэтому я ищу способ защитить свои файлы от людей, которые нажимают «показать содержимое пакета».

Ответы [ 9 ]

15 голосов
/ 25 февраля 2011

Ваш вопрос неоднозначен, поэтому есть несколько возможных ответов в зависимости от того, чего вы действительно пытаетесь достичь.

Если вы разрабатываете, как я предполагаю, настольное приложение, использующее Titanium, то вы можетеиспользуйте getFile модуля FileSystem, чтобы получить объект файла, затем проверьте, существует ли он, используя метод существующие.

Вот пример, взятый с веб-сайта 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-запрос, попытаться получить файл и отреагировать на полученный ответ.Хотя имейте в виду, что вы можете проверять только те файлы, которые доступны вашему веб-серверу.Лучшим подходом было бы написать сценарий на стороне сервера (например, php), который будет выполнять проверку для вас, учитывая имя файла и вызывать этот сценарий через ajax.Кроме того, имейте в виду, что вы можете очень легко создать дыру в безопасности вашего приложения / сервера, если вы недостаточно внимательны.

2) вы хотите проверить, существует ли файл на стороне клиента.В этом случае, как отметили другие, это не разрешено по соображениям безопасности (хотя IE допускал это в прошлом через ActiveX и класс Scripting.FileSystemObject), и это нормально (никто не хочет, чтобы вы могли пройти через ихфайлы), так что забудьте об этом.

10 голосов
/ 27 апреля 2011

Так как «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 не мог быть передан.
  • помните, что это только проверяет, не существует ли файл .
8 голосов
/ 31 января 2014

Вы можете использовать это

function LinkCheck(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}
4 голосов
/ 25 февраля 2011

Javascript не может получить доступ к файловой системе и проверить наличие.Единственное взаимодействие с файловой системой - загрузка js-файлов и изображений (png / gif / etc).

Javascript не является задачей для этого

3 голосов
/ 25 февраля 2011

К счастью, по соображениям безопасности невозможно получить доступ к клиентской файловой системе со стандартным JS.Однако существуют некоторые проприетарные решения (например, компонент Microsoft ActiveX только для IE).

3 голосов
/ 25 февраля 2011

Если вы хотите проверить, существует ли файл с использованием javascript, то нет, насколько я знаю, javascript не имеет доступа к файловой системе по соображениям безопасности. Но для меня не совсем понятно, что вы пытаетесь сделать ..

2 голосов
/ 15 марта 2013

Альтернатива: вы можете использовать «скрытый» элемент апплета, который реализует эту проверку существования с использованием привилегированного объекта действия и переопределит ваш метод запуска следующим образом:

1 голос
/ 03 августа 2016

Один из способов сделать это - создать тег img и установить атрибут src для файла, который вы ищете. Onload или onerror элемента img будут срабатывать в зависимости от того, существует ли файл. Вы не можете загрузить какие-либо данные, используя этот метод, но вы можете определить, существует ли конкретный файл или нет.

0 голосов
/ 21 февраля 2017

Попробуйте это:

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