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