Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   FileReader проблема с локальными файлами (https://javascript.ru/forum/misc/13227-filereader-problema-s-lokalnymi-fajjlami.html)

kostysh 21.11.2010 19:40

FileReader проблема с локальными файлами
 
Привет, при разработке приложения для Хрома, столкнулся с необходимостью чтения локальных файлов. По данному вопросу есть хороший мануал http://www.html5rocks.com/tutorials/file/dndfiles/

Используя инфу из этого мануала я написал себе плагин для jQuery, в черновом варианте пока (если кому интересно - вышлю). Казалось бы все просто, но неожиданно выплыла странная проблема. Если скрипт запускается с локального диска - то получить содержимое локальных файлов не получается (атрибуты файла читаются, но после вызова функции readAsBinaryString в evt.target.result - пустота). Если абсолютно тот же самый скрипт загрузить на хостинг, открыть страницу со скриптом с веба - то локальные файлы читаются.
Подозреваю, что это какая-то секюрная фича, но смысл ее мне не понятен. Кстати, те примеры из упомянутого выше мануала, которые касаются непосредственно чтения локальных файлов (побайтово или целиком) - имеют такие же проблемы.

Другие браузеры не пробовал, но они мне не нужны в принципе, поскольку разрабатывается конкретно приложение для Google Chrome. Сейчас у меня версия 7.0.517.44 (это стабильная ветка).

B@rmaley.e><e 21.11.2010 21:10

Цитата:

Сообщение от kostysh
Подозреваю, что это какая-то секюрная фича, но смысл ее мне не понятен.

Гипотетическая ситуация: вам прислали .html файл, вы его запустили с локального диска и он послал злоумышленникам содержимое какого-нибудь важного файла.

kostysh 22.11.2010 01:19

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 80114)
Гипотетическая ситуация: вам прислали .html файл, вы его запустили с локального диска и он послал злоумышленникам содержимое какого-нибудь важного файла.

в данном случае так не получится. Дело в том, что объект FileReader работает исключительно со стандартными input (тип: file) элементами формы.
Что это означает? - это означает, что для того, чтобы злоумышленникам что-то отправилось, я должен сначала нажать на кнопку "просмотреть файлы", затем через диалог выбрать тот самый "какой-то важный файл"... только начиная с этого момента возможна автоматизация.

Так что, на самом деле, проблем с секьюрностью нет.

dmitriymar 24.11.2010 16:38

Кста .интересно. после выбора файла страница обновляеться? если да-то вот тебе и причина.была подобная проблема на локальном-файл (графический) грузился в контейнер-и был в нём ровно столько времени сколько висело аларм сообщение об успешности. а дальше закрытие аларма-обновление страницы и отсутствие картинки

kostysh 24.11.2010 17:59

Цитата:

Сообщение от dmitriymar (Сообщение 80547)
Кста .интересно. после выбора файла страница обновляеться? если да-то вот тебе и причина.была подобная проблема на локальном-файл (графический) грузился в контейнер-и был в нём ровно столько времени сколько висело аларм сообщение об успешности. а дальше закрытие аларма-обновление страницы и отсутствие картинки

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

Так вот, если открыть локально НЕ-инсталлированное приложение, для Хрома, просто как файл - то код чтения локальных файлов не работает, все как я описывал выше. НО, если инсталировать хром-приложение и, соответственно, открыть страницу с кодом уже как приложение - то все отлично работает. Локальные файлы читаются.

Если интересно, могу показать пример, где файлы читаются с локального диска, затем сохраняются в локальный же Web SQL Storage, и затем по запросу оттуда читаются и выводятся в слой (в текстовом виде).

Кстати, с последним тоже связана сложность - если попытаться вывести в слой не текст, а html-строку, которая содержит ссылки на локальные файлы (а у меня в XML-ях такого полно), то ничего не получится - скрипт выдаст ошибку: "Not allowed to load local resource". Совершенно необъяснимо зачем нужна такая секьюрная штука, поскольку, если мне нужно - ее элементарно обойти. Если мне нужно вывести в страницу ссылки на локальные файлы, которые содержатся в тексте - я просто могу парсером завернуть их джаваскрипт функции.


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