Офлайн-хранилище HTML5. Файловое хранилище? Каталоги и файловая система API

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

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

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

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

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

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

Аналогично questions.

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


person Vanuan    schedule 14.10.2010    source источник


Ответы (7)


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

У меня будет DOMFileSystem с возможностью чтения / записи, пожалуйста, написала:

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

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

person Vanuan    schedule 12.12.2010
comment
Проголосуйте за то, чтобы не сдаваться и всегда смотреть. И спасибо за то, что вернулись и предоставили обновления. - person mt3; 24.03.2011

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

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

person Richard Poole    schedule 07.12.2010
comment
Другой сценарий - медиаплеер. Как приложение HTML5 должно воспроизводить файлы пользователя? - person Vanuan; 09.12.2010
comment
Вероятно, вы могли бы создать примитивный медиаплеер с <input type="file"> (чтобы позволить пользователю выбирать файл) и JavaScript (для установки атрибута src соответствующего элемента <audio> или <video>). О полнофункциональном медиа-браузере, вероятно, не может быть и речи. - person Richard Poole; 13.12.2010

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

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

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

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

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

person John Kramlich    schedule 05.12.2010
comment
Текущая версия всех основных браузеров поддерживает URI данных, но IE8 ограничен 32 КБ, что ограничивает его полезность для больших файлов. - person Ken; 07.12.2010

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

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

person Ian Devlin    schedule 15.10.2010
comment
Я думаю, это нехорошо. Веб-приложения становятся более облачными и менее бесплатными. Как насчет реализации автономного блокнота в HTML5? - person Vanuan; 18.10.2010
comment
Я не говорю о локальной файловой системе. Некоторая виртуальная файловая система песочницы подойдет. HTML5 уже имеет возможность читать и писать общую базу данных SQL. А как насчет выделения какой-нибудь пустой папки для веб-приложения для хранения его данных? - person Vanuan; 20.10.2010

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

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

person ebidel    schedule 18.05.2011

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

person kwh    schedule 28.02.2014

Как упоминалось здесь другими, FileWriter и FileSystem можно использовать для хранения файлов на клиентских машина из контекста вкладки / окна браузера.

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

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

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

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

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

//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 поддерживается этим парнем прямо здесь :).

person Kevin    schedule 07.07.2016