Чтение локального файла с помощью JavaScript

Итак, у меня есть файл с локальным именем «index.html», к которому я обращаюсь с использованием протокола «file://». (Так что не протокол "http://"). Мне нужно получить доступ к файлу «data.txt» в том же каталоге, который постоянно изменяется отдельной программой, но, поскольку я использую файловый протокол, доступ к файлу запрещен по соображениям безопасности.

Что я могу сделать, чтобы прочитать локальный файл? Я думал о запуске локального сервера с использованием XAMPP или WAMP, но я бы не хотел использовать какие-либо дополнительные программы.

РЕДАКТИРОВАТЬ: я не могу использовать входной файл, так как он должен работать без какого-либо взаимодействия с пользователем.


person Resantic    schedule 12.09.2016    source источник
comment
Возможный дубликат Чтение локального файла в javascript   -  person Dexygen    schedule 12.09.2016
comment
Возможный дубликат Доступ к локальному файлу с помощью javascript   -  person Liam    schedule 12.09.2016
comment
поскольку он должен работать без взаимодействия с пользователем, это будет гигантская брешь в системе безопасности. Если бы это было возможно, что помешало бы мне написать веб-сайт, который при посещении просто показывал бы все ваши локальные файлы?   -  person Liam    schedule 12.09.2016
comment
@Liam Это все еще недостаток безопасности, но он менее гигантский, чем вы думаете. Страница, с которой я запрашиваю локальный файл, также является локальной. Таким образом, это будет то же самое, что и программа на C++, которая читает локальные файлы.   -  person Resantic    schedule 12.09.2016
comment
Вы упускаете мою точку зрения. Браузер, в котором запускается JavaScript, обслуживает веб-страницы (локальные и удаленные). Он не может различать их. Тот факт, что он локальный, не имеет значения для браузера, ему просто все равно. Это предотвратит доступ ко всем локальным файлам, потому что, если бы это было не так, кто-нибудь (локальный или удаленный) мог бы захватить вашу машину.   -  person Liam    schedule 12.09.2016
comment
В любом случае это дубликат   -  person Liam    schedule 12.09.2016


Ответы (1)


Вы можете сделать это через File API — https://www.w3.org/TR/file-upload/

В приведенном ниже примере отфильтровываются изображения из выбранного пользователем, вызывается метод reader.readAsDataURL() для файла и отображается миниатюра, присваивая атрибуту 'src' URL-адрес данных.

<style>
  .thumb {
    height: 75px;
    border: 1px solid #000;
    margin: 10px 5px 0 0;
  }
</style>

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // Loop through the FileList and render image files as thumbnails.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          // Render thumbnail.
          var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,
                            '" title="', escape(theFile.name), '"/>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>

person Jaipradeesh    schedule 12.09.2016