Як уже згадувалося раніше, API FileSystem та File разом із API FileWriter можна використовувати для читання та запису файлів із контексту вкладки / вікна браузера на клієнтську машину.
Існує кілька речей, що стосуються API FileSystem та FileWriter, про які слід пам’ятати, деякі з яких були згадані, але які варто повторити:
- Зараз реалізація API існує лише у веб-переглядачах Chromium (Chrome & Opera)
- Обидва API були вилучені з треку стандартів W3C 24 квітня 2014 року, і на сьогоднішній день є власником
- В майбутньому можливе видалення (зараз фірмових) API з веб-переглядачів
- Для зберігання файлів, створених за допомогою API, використовується пісочниця (розташування на диску, поза яким файли не дають ефекту)
- Віртуальна файлова система (структура каталогів , яка не обов'язково існує на диску в тій же формі , що робить , коли доступ з браузера) використовується представляють файли , створені з допомогою API -
Ось прості приклади того, як API, прямо та опосередковано, використовуються в тандемі для таких дій:
Запечені продукти *
Написати файл:
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, 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 вже не знаходяться на етапі стандартів, на мою думку, їх використання може бути виправданим у деяких випадках, оскільки:
- Поновлений інтерес з боку постачальників веб-переглядачів, що не реалізуються, може повернути їх на себе
- Проникнення на ринок веб-переглядачів (на основі хрому) є високим
- Google (головний учасник Chromium) не вказав API та термін його закінчення
Однак, чи "деякі випадки" охоплюють ваш власний, вирішувати вам.
* BakedGoods тут підтримує не хто інший, як цей хлопець :)