Как упоминалось ранее, API FileSystem и File вместе с API FileWriter могут использоваться для чтения и записи файлов из контекста вкладка / окно браузера на клиентском компьютере.
Есть несколько вещей, относящихся к API-интерфейсам FileSystem и FileWriter, о которых вы должны знать, некоторые из которых были упомянуты, но стоит повторить:
- Реализации API в настоящее время существуют только в браузерах на основе Chromium (Chrome & Opera)
- Оба API были сняты со стандартного трека W3C 24 апреля 2014 года и на данный момент являются собственностью
- Возможность удаления (в настоящее время проприетарных) API-интерфейсов из реализации браузеров в будущем возможна
- A песочница (место на диске, вне которого файлы не могут оказать никакого эффекта) используется для хранения файлов, созданных с помощью API
- виртуальная файловая система (структура каталогов, которая не обязательно существует на диске в той же форме, что и при доступе из браузера), представляет файлы, созданные с помощью API
Вот простые примеры того, как API, прямо или косвенно, используются для выполнения этих действий:
BakedGoods *
Записать файл:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Считать файл:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Использование необработанных API-интерфейсов File, FileWriter и FileSystem
Записать файл:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Прочитать файл:
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Хотя API FileSystem и FileWriter больше не соответствуют стандартам, их использование в некоторых случаях может быть оправдано, на мой взгляд, потому что:
- Возобновление интереса со стороны не реализующих поставщиков браузеров может привести их обратно к этому
- Высокий уровень проникновения на рынок внедряющих браузеров (на основе Chromium)
- Google (основной вкладчик в Chromium) не указал API-интерфейсы и дату окончания срока их службы
Однако, должны ли решать "некоторые случаи" ваши собственные.
* BakedGoods поддерживается не кем иным, как этим парнем прямо здесь:)