2017-02-07 2 views
0

Я хочу прочитать локальный текстовый файл из моего локального файла HTML, поэтому я пытался следовать решению в этой теме Javascript - read local text file но предложенное решение не работает для меня тоже:Читать локальный текстовый файл с JavaScript

function readTextFile(file) 
{ 
    var rawFile = new XMLHttpRequest(); 
    rawFile.open("GET", file, false); 
    rawFile.onreadystatechange = function() 
    { 
     if(rawFile.readyState === 4) 
     { 
      if(rawFile.status === 200 || rawFile.status == 0) 
      { 
       var allText = rawFile.responseText; 
       alert(allText); 
      } 
     } 
    } 
    rawFile.send(null); 
} 

Когда я вызываю функцию readTextFile("file:///D:/test/text.txt");, в firebug не появляется ошибка, но не отображается ни одно предупреждение. Я использую Windows и Firefox 51.0.1 (64-разрядный). Я не хочу использовать функцию FileReader() в сочетании с кнопкой <input type='file' onchange='openFile(event)' ..., так как текстовый файл необходимо читать автоматически при загрузке страницы. Итак, как я могу сделать работу над решением выше?

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

+0

Все сохраняется на компьютере. При чтении темы другие люди не могли решить проблему, хотя нить отмечена как разрешенная. – Markus

+1

Почему бы не использовать FileReader и соответствующий API? Я использовал его раньше, он работает. –

+2

_ «Чтение темы, которую другие люди не могли решить проблему, хотя нить помечена как решенная» _ - Это не меняет того, что является результатом следующего обсуждения: вы не можете просто читать локальные файлы волей-неволей , потому что это будет серьезной проблемой безопасности. Вам нужно взаимодействие с пользователем, чтобы сначала выбрать файл. – CBroe

ответ

1

Как правило, доступ к локальной файловой системе из JavaScript невозможен, поэтому ваш пример кода не должен и не может работать из-за безопасности браузера.

Однако, есть File и FileReader API, который позволит вам прочитать содержимое файла из <input type="file" /> и, на самом деле, единственный вариант для такого рода вещей - Вы можете использовать FileReader.readAsText() для доступа к содержимому файлов , Это хороший ресурс для получения дополнительной информации:

https://www.html5rocks.com/en/tutorials/file/dndfiles/

+0

Хорошо, спасибо за ваше объяснение. Поэтому я не понимаю, почему создатель связанного потока пишет «заставил его работать в браузере [..]». В результате использование функции FileReader() и определение события переменной и использование '' тоже не будет работать? – Markus

+1

FYI Если вы ориентируетесь на что-либо ниже IE11, то FileReader недоступен для вас: http://caniuse.com/#search=FileReader без SHIM –

+0

@Markus - это старый вопрос, и это похоже на то, что, вероятно, работал в прошлом, но с тех пор устарел из-за проблем безопасности, которые он вводит. Вы не хотите, чтобы веб-сайт мог «украсть» файлы с вашего компьютера! – edcs

3

Полный HTML и JavaScript-файл в качестве примера для чтения файлов данных на стороне клиента. Файлы на стороне клиента могут быть доступны только FileReader, указав выбранный пользователем файл.

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript"> 
       function loadFile(o) 
       { 
        var fr = new FileReader(); 
        fr.onload = function(e) 
         { 
          showDataFile(e, o); 
         }; 
        fr.readAsText(o.files[0]); 
       } 

       function showDataFile(e, o) 
       { 
        document.getElementById("data").innerText = e.target.result; 
       } 
      </script> 

     </script> 
    </head> 
    <body> 
     Select file to read <input type="file" onchange="loadFile(this)"> 
     <pre id="data"></pre> 
    </body> 
</html> 
+0

Ухоженный и сладкий! –

-1

Самый простой способ решить мою проблему, чтобы изменить текстовый файл в .js файл, сохраните его в той же папке, и включить его в HTML-файл, <script src="test.js"></script>

Смежные вопросы