Javascript FileAPI: итерация каталогов? - PullRequest
2 голосов
/ 21 ноября 2010

Firefox 3.6 позволяет вам перетащить каталог на какой-либо элемент (используя Drag And Drop API) и обработать эти файлы с помощью FileAPI . Как это работает с каталогами?

Mac OS X Finder отображает некоторые каталоги в виде файлов (.app, .tmbundle, .abbu,…). В большинстве случаев это замечательно. В случае взаимодействия с браузером через File- и DND-API это не так. Конечный пользователь не может различить реальный файл и тип файла, такой как my-addressbook-backup.abbu.

Поэтому пользовательский интерфейс Javascript должен иметь возможность идентифицировать структуры каталогов. Если он не способен пройти через структуру, он должен информировать об этом пользователя соответствующим образом.

Любые идеи о том, как можно достичь?

Edit:

Я вижу (потенциальные) проблемы, возникающие при разрешении JS обходить каталоги. Я не призываю к обходу каталогов как таковому (хотя я не буду связывать возможность). Я говорю о том, что Foo.app рассматривается как файл (как это видно пользователю через Finder.app), но на самом деле это каталог (как это видно при просмотре в Terminal.app).

Файловый API в настоящее время не предоставляет никаких механизмов обхода. Поэтому более глубокие вложенные файлы в адресной книге-dump.abbu будут недоступны. Есть какие-нибудь мысли о том, чтобы сделать это возможным?

В противном случае я должен был бы попросить своих пользователей OSX сделать архив (например, ZIP) из файла их адресной книги и «загрузить» этот zip (который я действительно могу прочитать в JS). Хотя это обходной путь, а не решение.

1 Ответ

4 голосов
/ 21 октября 2011

Теоретически, то, что вы описываете, выполнимо с помощью FileReader API. Например, это демо читает файл .zip (нажмите load photos.zip), распаковывает его содержимое и отображает список изображений, которые он содержит для пользователя.

Для общего перетаскивания папок есть две ошибки, сдерживающие Chrome / WebKit: 1 , 2 . Когда это будет исправлено, вы сможете перетащить папку из ОС на <input type="file" webkitdirectory> и пересечь всю ее иерархию. Чтобы увидеть webkitdirectory в действии, посмотрите это демо в Chrome.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...