Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Чтение файла на стороне клиента (https://javascript.ru/forum/css-html/60617-chtenie-fajjla-na-storone-klienta.html)

annie88 11.01.2016 13:43

Чтение файла на стороне клиента
 
Добрый день!

Не могли бы Вы мне помочь? Есть некое приложение создающее на стороне клиента файл и записывающее в него какую-то информацию.
Как можно средствами javascript эту информацию считать? Все действия должны происходить только на стороне клиента, без сохранения файла на сервере.
P.S. думала в сторону cookie и locallstorage, но не знаю может ли десктопное приложение что-то туда писать.

Dilettante_Pro 11.01.2016 15:00

annie88, считать содержимое файла на стороне клиента легко:
При помощи input type="file" выбираем файл на клиентском компьютере и через объект типа FileReader считываем его содержимое:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" >
    <title>Untitled Page</title>
    <script type="text/javascript">
         function readFile() {
           var selectedFile = document.getElementById('inputFile').files[0];
           var reader = new FileReader();
           reader.onload = function (e) {
             var FileContent = e.target.result;
			 parseContent(FileContent);
           };
           reader.readAsText(selectedFile);
	     }

         function parseContent(content) {
             alert(content);
         }
    </script>
  </head>
  <body>
     <input id="inputFile" type="file"  onchange="readFile()">
  </body>
</html>

А вот потом содержимое файла надо разобрать...

annie88 11.01.2016 15:07

Спасибо))) а можно считать файл без вывода окон? просто считывать данные со статично расположенного файла (имя его тоже известно и оно не меняется)?

Dilettante_Pro 11.01.2016 15:27

Естественно можно!
Тогда не нужен input, и в функции readFile() не нужна строка получения имени файла из input'а
var selectedFile = document.getElementById('inputFile').files[0];

Известное имя файла нужно подставить в reader.readAsText(file);
Можно передать имя файла в функцию readFile() в качестве параметра

annie88 11.01.2016 15:52

Здорово))) однако не совсем понятно как можно сформировать объект для передачи в качестве параметра в reader.readAsText?

Dilettante_Pro 11.01.2016 16:07

Цитата:

Сообщение от annie88 (Сообщение 403268)
Здорово))) однако не совсем понятно как можно сформировать объект для передачи в качестве параметра в reader.readAsText?

Какой объект? Известное имя файла? Простая символьная переменная...
например

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" >
    <title>Untitled Page</title>
    <script type="text/javascript">
         function readFile(selectedFile) {
            var reader = new FileReader();
           reader.onload = function (e) {
             var FileContent = e.target.result;
             parseContent(FileContent);
           };
           reader.readAsText(selectedFile);
         }
 
         function parseContent(content) {
             alert(content);
         }
    </script>
  </head>
  <body>
     <input  type="button"  onclick="readFile('C:\Test\TestFile.txt')">
  </body>
</html>

annie88 11.01.2016 16:19

Цитата:

Сообщение от Dilettante_Pro
Какой объект? Известное имя файла? Простая символьная переменная...

selectedFile не символьная переменная, это объект

Dilettante_Pro 11.01.2016 16:24

Цитата:

Сообщение от annie88 (Сообщение 403272)
selectedFile не символьная переменная, это объект

В обоих моих примерах это ПРОСТАЯ СИМВОЛЬНАЯ ПЕРЕМЕННАЯ. (Ну, пардон, СТРОКОВАЯ в терминологии JS)
В первом примере она получает значение (символьное) из input, во втором - как параметр функции из символьной строки при вызове функции

annie88 11.01.2016 16:37

Цитата:

Сообщение от Dilettante_Pro
В обоих моих примерах это ПРОСТАЯ СИМВОЛЬНАЯ ПЕРЕМЕННАЯ.

console.log(selectedFile) вывел в firebug что-то вроде :
File { name="file.txt", lastModified=1449139811127, lastModifiedDate=Date,...}

Dilettante_Pro 11.01.2016 16:52

Да, пардон, это Blob...


Часовой пояс GMT +3, время: 21:30.