Jak wspomniano wcześniej, FileSystem i File API, wraz z FileWriter API, mogą być używane do odczytywania i zapisywania plików z kontekstu karty / okna przeglądarki na komputer kliencki.
Istnieje kilka rzeczy związanych z interfejsami API FileSystem i FileWriter, o których powinieneś wiedzieć, z których niektóre zostały wspomniane, ale warto je powtórzyć:
- Implementacje interfejsów API istnieją obecnie tylko w przeglądarkach opartych na Chromium (Chrome i Opera)
- Oba interfejsy API zostały usunięte ze ścieżki standardów W3C 24 kwietnia 2014 r. I od tej pory są zastrzeżone
- Możliwe jest usunięcie (obecnie zastrzeżonych) API z implementacji przeglądarek w przyszłości
- piaskownicy (a lokalizacja na zewnątrz dysku pliki, które mogą przynieść żadnego efektu) służy do przechowywania plików utworzonych za pomocą interfejsów API
- Wirtualny system plików (struktura katalogów, które niekoniecznie istnieje na dysku w tej samej formie, że nie kiedy dostęp z poziomu przeglądarki) jest używany reprezentują plików utworzonych za pomocą interfejsów API
Oto proste przykłady tego, jak interfejsy API są używane, bezpośrednio i pośrednio, w tandemie do wykonywania następujących czynności:
BakedGoods *
Zapisz plik:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Czytaj plik:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Korzystanie z nieprzetworzonych interfejsów API File, FileWriter i FileSystem
Zapisz plik:
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);
Czytaj plik:
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);
Chociaż API FileSystem i FileWriter nie są już na ścieżce standardów, moim zdaniem ich użycie może być uzasadnione w niektórych przypadkach, ponieważ:
- Ponowne zainteresowanie ze strony producentów przeglądarek, którzy nie wdrażają, może sprawić, że zostaną na niej z powrotem
- Penetracja rynku przeglądarek implementujących (opartych na Chromium) jest wysoka
- Google (główny twórca Chromium) nie podał ani daty zakończenia użytkowania interfejsów API
Jednak to, czy „niektóre przypadki” obejmują twoje własne, należy do ciebie.
* BakedGoods jest utrzymywane przez nikogo innego, jak tylko tego gościa tutaj :)