Come accennato in precedenza, le API FileSystem e File , insieme all'API FileWriter , possono essere utilizzate per leggere e scrivere file dal contesto di una scheda / finestra del browser su un computer client.
Esistono diverse cose relative alle API FileSystem e FileWriter di cui dovresti essere a conoscenza, alcune delle quali sono state menzionate, ma vale la pena ripetere:
- Le implementazioni delle API attualmente esistono solo nei browser basati su Chromium (Chrome e Opera)
- Entrambe le API sono state tolte dalla traccia degli standard W3C il 24 aprile 2014 e finora sono proprietarie
- La rimozione delle API (ora proprietarie) dall'implementazione dei browser in futuro è una possibilità
- Una sandbox (una posizione sul disco al di fuori della quale i file non possono produrre alcun effetto) viene utilizzata per archiviare i file creati con le API
- Un file system virtuale (una struttura di directory che non esiste necessariamente sul disco nella stessa forma che utilizza quando si accede dall'interno del browser) rappresenta i file creati con le API
Ecco alcuni semplici esempi di come le API vengono utilizzate, direttamente e indirettamente, insieme per fare queste cose:
BakedGoods *
Scrivi file:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Leggi il file:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Utilizzo delle API File, FileWriter e FileSystem non elaborate
Scrivi file:
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);
Leggi il file:
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);
Sebbene le API FileSystem e FileWriter non siano più sulla buona strada degli standard, il loro uso può essere giustificato in alcuni casi, secondo me, perché:
- L'interesse rinnovato da parte dei fornitori di browser non implementati potrebbe reinserirli
- La penetrazione nel mercato dell'implementazione di browser (basati su Chromium) è elevata
- Google (il principale collaboratore di Chromium) non ha fornito e data di fine vita alle API
Se "alcuni casi" comprende i tuoi, tuttavia, spetta a te decidere.
* BakedGoods è gestito da nientemeno che questo ragazzo qui :)