Wie bereits erwähnt, können die FileSystem- und File- APIs zusammen mit der FileWriter- API zum Lesen und Schreiben von Dateien aus dem Kontext einer Browserregisterkarte / eines Browserfensters auf einen Clientcomputer verwendet werden.
Im Zusammenhang mit den APIs FileSystem und FileWriter sollten Sie einige Dinge beachten, von denen einige erwähnt wurden, die jedoch wiederholt werden sollten:
- Implementierungen der APIs sind derzeit nur in Chromium-basierten Browsern (Chrome & Opera) vorhanden.
- Beide APIs wurden am 24. April 2014 aus dem W3C-Standard-Track entfernt und sind ab sofort proprietär
- Das Entfernen der (jetzt proprietären) APIs aus zukünftigen Implementierungen von Browsern ist möglich
- Ein Sandkasten (ein Speicherort auf der Festplatte, außerhalb dessen Dateien keine Auswirkungen haben können) wird zum Speichern der mit den APIs erstellten Dateien verwendet
- Ein virtuelles Dateisystem (eine Verzeichnisstruktur, die nicht unbedingt in derselben Form auf der Festplatte vorhanden ist wie beim Zugriff über den Browser) repräsentiert die mit den APIs erstellten Dateien
Hier sind einfache Beispiele dafür, wie die APIs direkt und indirekt zusammen verwendet werden, um diese Dinge zu tun:
BakedGoods *
Datei schreiben:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Datei lesen:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Verwenden der Rohdatei-, FileWriter- und FileSystem-APIs
Datei schreiben:
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);
Datei lesen:
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);
Obwohl die FileSystem- und FileWriter-APIs nicht mehr auf der Standardspur sind, kann ihre Verwendung meiner Meinung nach in einigen Fällen gerechtfertigt sein, weil:
- Erneutes Interesse der nicht implementierenden Browser-Anbieter kann sie direkt wieder darauf setzen
- Die Marktdurchdringung der Implementierung von (Chromium-basierten) Browsern ist hoch
- Google (der Hauptverursacher von Chromium) hat den APIs kein Datum für das Ende der Lebensdauer angegeben
Ob "einige Fälle" Ihre eigenen umfassen, müssen Sie jedoch selbst entscheiden.
* BakedGoods wird von niemand anderem als diesem Kerl hier gepflegt :)