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