Проверьте, существует ли файл локально, используя только 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
    }
  }
});