2014-09-15 2 views
0

привет, я использую java-скрипт для чтения txt-файла с моего компьютера. я пытаюсь сделать это в 3 способами, как, что:читать файл из локального хранилища с помощью js

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; 
         console.log(allText); 
        } 
       } 
      } 
      rawFile.send(null); 
     } 
     console.log("1"); 
     readTextFile("text.txt"); //GOOD 
     console.log("2"); 
     readTextFile("D:/Documents/Documents/Aptana Studio 3 Workspace/Yonit_web_services/test/text.txt"); //BAD 
     console.log("3"); 
     readTextFile("file:///D:/Documents/Documents/Aptana Studio 3 Workspace/Yonit_web_services/test/text.txt"); //BAD 

все они указывают на тот же файл я получил сообщение об ошибке вроде этого:

XMLHttpRequest не может загрузить файл: /// D: /Documents/Documents/Aptana%20Studio%203%20Workspace/Yonit_web_services/test/text.txt. Запросы на кросс-начало поддерживаются только для HTTP. test.html: 21readTextFile test.html: 21 (анонимная функция) test.html: 26

whay is that? Благодарю.

+4

JavaScript не может получить доступ к локальной файловой системе по соображениям безопасности. –

+0

'XMLHttpRequest' имеет некоторые ограничения с перекрестным происхождением. При этом, как вы это делаете, 'D: /' и 'file: /// D: /' заставляет файл получить доступ за пределами источника. –

+0

вам нужно использовать для чтения локальных файлов в javascript. вы выбираете файл, затем запускаете URL.createObjectURL (inpFile.files [0]); чтобы получить URL-адрес, который вы можете подавать в вашу функцию readTextFile() как закодированную. вы не можете жестко закодировать путь во вводе, пользователь должен выбрать файл по соображениям безопасности. – dandavis

ответ

0

Браузер не разрешает доступ к файлам через javascript из-за соображений безопасности, найдите ссылку ниже.

Security

Но в HTML5 его возможной через использование файла Загрузить/Загрузить, ссылка File Uplaod/Download

1

У меня была та же проблема некоторое время назад. Я установил его, открыв командную строку Chrome через Windows с помощью этого параметра: --disable-web-security

Обратите внимание, что это уязвимости системы безопасности.

0

Первый способ чтения файла:

readTextFile("text.txt"); //GOOD

работает, потому что "text.txt" является относительный путь в том же отношении, что если бы у вас была файловая система:

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

из через окна командной строки вы можете проверить эти относительные пути с dir следующим образом:

REM Dir will show contents of current directory 
Dir 
REM Dir .. will show contents of parent directory 
Dir .. 
REM Dir ../.. will show contents of parent's parent directory 
Dir ../.. 

тот же путь-ки должен работать в JavaScript

Это, как говорится, ограничения на d:/ и file://D:/ скорее всего по соображениям безопасности. Возможно, вы захотите проверить http://en.wikipedia.org/wiki/Samba_%28software%29 для получения более подробной информации.

0

Вы всегда можете сделать что-то одно, и это будет помещено на какой-либо URL-адрес, откуда ваше приложение будет обращаться к нему (только если оно не содержит никакой защищенной информации).

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