Javascript FileAPI: итерация каталогов?
Firefox 3.6 позволяет вам помещать каталог в какой-либо элемент (используя Drag And Drop API) и обрабатывать эти файлы с помощью FileAPI. Как это работает с каталогами?
Mac OS X Finder отображает некоторые каталоги в виде файлов (.app, .tmbundle, .abbu, …). В большинстве случаев это замечательно. В случае взаимодействия с браузером через File- и DND-API это не так. Конечный пользователь не может различить реальный файл и тип файла, такой как my-addressbook-backup.abbu.
Поэтому пользовательский интерфейс Javascript должен иметь возможность идентифицировать структуры каталогов. Если он не способен пройти через структуру, он должен информировать об этом пользователя соответствующим образом.
Любые идеи о том, как либо можно достичь?
Редактировать:
Я вижу (потенциальные) проблемы, возникающие при разрешении JS обходить каталоги. Я не призываю к обходу каталогов как таковому (хотя я не буду связывать возможность). Я говорю о том, что Foo.app рассматривается как файл (как это видно пользователю через Finder.app), но на самом деле это каталог (как это видно при просмотре в Terminal.app).
Файловый API в настоящее время не предоставляет никаких механизмов обхода. Таким образом, более глубокие вложенные файлы в адресной книге-dump.abbu не будут доступны. Есть какие-нибудь мысли о том, чтобы сделать это возможным?
В противном случае я должен был бы сказать своим пользователям OSX сделать архив (например, ZIP) из их файла адресной книги и "загрузить" этот zip (который я действительно могу прочитать в JS). Хотя это обходной путь, а не решение.
1 ответ
Теоретически, то, что вы описываете, выполнимо с FileReader
API. Например, эта демонстрационная программа читает файл.zip (нажмите load photos.zip), распаковывает его содержимое и отображает список изображений, которые он содержит, для пользователя.
Для общего перетаскивания папок есть две ошибки, удерживающие Chrome/WebKit: 1, 2. Когда это будет исправлено, вы сможете перетащить папку из ОС на <input type="file" webkitdirectory>
и пересечь всю его иерархию. Видеть webkitdirectory
в действии, посмотрите эту демонстрацию в Chrome.