Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ничего себе! Я так взволнован!

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

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

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

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

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

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