HTML5 автономное хранилище.Файловое хранилище?Каталоги и файловая система API - PullRequest
21 голосов
/ 14 октября 2010

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

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

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

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

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

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

Подобные вопросы .

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

Ответы [ 7 ]

17 голосов
/ 12 декабря 2010

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

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

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

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

6 голосов
/ 07 декабря 2010

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

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

3 голосов
/ 05 декабря 2010

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

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

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

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

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

2 голосов
/ 15 октября 2010

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

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

1 голос
/ 18 мая 2011

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

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

0 голосов
/ 07 июля 2016

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

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

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

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

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

BakedGoods , библиотека Javascript, устанавливающая единый интерфейс, который можно использовать для выполнения общих операций хранения во всех собственных (включая FileSystem), а также некоторых не собственных (включая 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 поддерживается этим парнем прямо здесь :).

0 голосов
/ 28 февраля 2014

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

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