HTML5 в автономном режиме хранения. Хранилище файлов? Каталоги и API файловой системы

для хранения данных в автономном режиме WebApp может использовать:

но, по-видимому, нет хранилища файлов. Конечно, есть манифест-кэширование, но это просто кэш и не должен использоваться в качестве хранилища пользовательских данных.

означает ли это, что пользователь WebApp вынужден использовать какое-то облачное хранилище файлов?

есть ли способ сохранить большие файлы на локальном компьютере пользователя? Или, может быть, какой-то способ выбрать локальную папку, которую веб-приложение может использовать для хранения пользователя Дейта?

редактировать. Безопасность. HTML5 уже имеет возможность записывать большие части данных на локальную машину пользователя. Я не вижу никаких проблем безопасности, если браузер предоставит другую файловую абстракцию для хранения данных. Это может быть какая-то виртуальная машина, виртуальная файловая система, что угодно.

Hm, я думаю, можно написать файловую систему JS и сохранить ее как blob в SQL...

как вопросы.

обновление: Хм... недавно я нашел этой и этой. Может, это то, что я ищу... Да, это так! См. ответ ниже.

7 ответов


наконец-то я нашел его! Вот ответ:

Я буду DOMFileSystem с чтение/запись пожалуйста писал:

Эрик Uhrhane из Google был работа над рабочим проектом файл API: каталоги и спецификация системы, который определяет набор API для создания изолированной файловой системы где веб-приложение может читать и писать данные.

Вау! Я так взволнована!


Почему бы не использовать localStorage пока пользователь редактирует документ и FileWriter API, если они хотят сохранить его на диск? Большинство людей привыкли видеть диалоговое окно сохранения при сохранении документа.

единственный сценарий, который я могу придумать, гарантирует беспользовательский доступ к FileWriter API-это функция автосохранения, но автосохранение в localStorage может быть так же хорошо.


есть способ сохранить относительно большие файлы на жесткий диск пользователя, если вы готовы использовать Flash. Посмотрите в Downloadify:

http://www.bitrepository.com/downloadify-client-side-file-generation.html

Downloadify позволяет отправлять данные в SWF и иметь, что SWF создать файл на компьютере пользователей. Моя рекомендация-хранить данные с помощью одного из перечисленных вами методов: Webstorage, SQLite database и т. д. Положите все ваши активы, включая SWF в файл манифеста, чтобы все кэшировалось локально в браузере. Затем вы можете извлечь информацию из своей БД или веб-хранилища и использовать SWF для создания необходимых файлов.

Я не уверен, если вы сможете прочитать эти файлы обратно в веб-приложение.

другой вариант сохранения данных - использование тегов ссылок с схема URI данных. Однако я не уверен, что он поддерживается во всех основных браузерах на данный момент.


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

Это вряд ли изменится, и это хорошо.


API файловой системы HTML5 начал приземляться в Chrome 8 и на данный момент довольно завершен (Chrome 11).

есть хороший учебник здесь: http://www.html5rocks.com/tutorials/file/filesystem/


http://fsojs.com эффективно обертывает API файловой системы, если вы хотите простое решение


а вот FileWriter и файловой системы API можно использовать для хранения файлов на компьютере клиента из контекста вкладки/окна браузера.

однако есть несколько вещей, относящихся к этим API, о которых вы должны знать:

  • реализации API в настоящее время существуют только в браузерах на основе хрома (Chrome & Opera)
  • оба API были сняты со стандартов W3C трек на 24 апреля 2014 года, и на данный момент являются собственностью
  • удаление (Теперь проприетарных) API из реализации браузеров в будущем-это возможность
  • A песочница (расположение на диске, за пределами которого файлы не могут производить никакого эффекта) используется для хранения файлов, созданных с помощью API
  • A виртуальная файловая система (структура каталогов, которая не обязательно существует на диске в той же форме, что и при доступе из браузера) используется представлять файлы, созданные с помощью API

IsolatedStorage, который еще не упоминался, также позволяет вводить файл из контекста вкладки / окна, но он доступен только через Silverlight и требует использования управляемого кода получить доступ. Он, как и файловая система, также существует в песочнице и использует виртуальную файловую систему.

учитывая высокое проникновение на рынок обоих Браузеры на основе хрома и Silverlight (поддержка которых, что интересно, была отброшена такими браузерами), вы можете найти решение, которое использует первый из вышеуказанных подходов, доступных на клиентской машине, удовлетворительно.

BakedGoods, библиотека Javascript, которая устанавливает единый интерфейс, который может использоваться для проведения общих операций хранения во всех собственных (включая файловую систему) и некоторых неродных (включая IsolatedStorage) хранилищах, является пример такого решения:

//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
    data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
    storageTypes: ["fileSystem", "silverlight"],
    options: {fileSystem:{storageType: Window.PERSISTENT}},
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

просто ради полной прозрачности, BakedGoods поддерживается этим парнем прямо здесь :).