Чтение файла на стороне клиента
Добрый день!
Не могли бы Вы мне помочь? Есть некое приложение создающее на стороне клиента файл и записывающее в него какую-то информацию. Как можно средствами javascript эту информацию считать? Все действия должны происходить только на стороне клиента, без сохранения файла на сервере. P.S. думала в сторону cookie и locallstorage, но не знаю может ли десктопное приложение что-то туда писать. |
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> А вот потом содержимое файла надо разобрать... |
Спасибо))) а можно считать файл без вывода окон? просто считывать данные со статично расположенного файла (имя его тоже известно и оно не меняется)?
|
Естественно можно!
Тогда не нужен input, и в функции readFile() не нужна строка получения имени файла из input'а var selectedFile = document.getElementById('inputFile').files[0]; Известное имя файла нужно подставить в reader.readAsText(file); Можно передать имя файла в функцию readFile() в качестве параметра |
Здорово))) однако не совсем понятно как можно сформировать объект для передачи в качестве параметра в 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> |
Цитата:
|
Цитата:
В первом примере она получает значение (символьное) из input, во втором - как параметр функции из символьной строки при вызове функции |
Цитата:
File { name="file.txt", lastModified=1449139811127, lastModifiedDate=Date,...} |
Да, пардон, это Blob...
|
т.е. без диалогового окна в этом случае не обойтись?
|
Похоже, работа на стороне клиента без участия человека невозможна из соображений безопасности - чтобы скрипт втихомолку не шарил по компу
|
Как выясняется, читает файл именно input type="file"
FileReader только вытаскивает содержимое считанного файла. Можно создать объект var selectedFile = new File(["Test Content ...."], "C:\Test\TestFile.txt", {type: "text/plain"}); Но толку от этого никакого: содержание файла тоже нужно вставить в объект ( в данном примере Test Content .... |
Dilettante_Pro,большое спасибо)
похоже, что все же придется копать в сторону File System или Local Storage((( |
annie88,
Успехов! Тонкостей не знаю, но, мне кажется, этот вариант работает с хранилищем, которое доступно только приложению, создавшему хранилище. Т.е. какое-либо другое приложение на локальной машине его вообще не увидит |
Получилось))) если создать файловую систему в браузере, то из web-приложения можно будет создавать/заполнять/читать файлы, которые будут доступны и десктопному приложению, нужно лишь задать в нем правильный путь. Данное решение, насколько я поняла, доступно пока только в chrome.
|
Цитата:
|
Цитата:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; window.requestFileSystem(window.TEMPORARY, 5*1024*1024, function(fs) { fs.root.getFile('log.txt', {create: true}, function(fileEntry) { }, функция_обработки_ошибки ); }, функция_обработки_ошибки); затем идем на уровень выше (в данном случае возвращаемся в t) и находим указанный в log каталог и файл. |
annie88,
Спасибо, очень интересная информация. Плохо только, что работает только в Chrome PS: я, кстати, искал fs на локалке по этому же пути, но ничего не нашел - не отображались скрытые файлы и папки, а копнуть поглубже не додумался... |
Часовой пояс GMT +3, время: 14:37. |