Javascript FileAPI: итерация каталогов?

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

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

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

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

Изменить:

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

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

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


person rodneyrehm    schedule 21.11.2010    source источник
comment
html5rocks.com/en/tutorials/file/filesystem выглядит многообещающе   -  person rodneyrehm    schedule 21.10.2011


Ответы (1)


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

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

person ebidel    schedule 20.10.2011
comment
Пример ZIP (уже указанный в моем вопросе) - довольно плохой обходной путь. Я не знал об API файловой системы до сих пор. Не могу дождаться этого :) - person rodneyrehm; 21.10.2011