Comme mentionné précédemment, les API FileSystem et File , ainsi que l' API FileWriter , peuvent être utilisées pour lire et écrire des fichiers à partir du contexte d'un onglet / fenêtre de navigateur sur un ordinateur client.
Il y a plusieurs choses concernant les API FileSystem et FileWriter dont vous devez être conscient, dont certaines ont été mentionnées, mais qu'il convient de répéter:
- Les implémentations des API n'existent actuellement que dans les navigateurs basés sur Chromium (Chrome et Opera)
- Les deux API ont été retirées de la piste des normes du W3C le 24 avril 2014 et sont désormais propriétaires
- La suppression des API (désormais propriétaires) de la mise en œuvre des navigateurs à l'avenir est une possibilité
- Un bac à sable (un emplacement sur le disque en dehors duquel les fichiers ne peuvent produire aucun effet) est utilisé pour stocker les fichiers créés avec les API
- Un système de fichiers virtuel (une structure de répertoires qui n'existe pas nécessairement sur le disque sous la même forme que lors de l'accès à partir du navigateur) est utilisé pour représenter les fichiers créés avec les API
Voici des exemples simples de la façon dont les API sont utilisées, directement et indirectement, en tandem pour faire ces choses:
Produits de boulangerie *
Ecrire le fichier:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Lire le fichier:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Utilisation des API Raw File, FileWriter et FileSystem
Ecrire le fichier:
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);
Lire le fichier:
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);
Bien que les API FileSystem et FileWriter ne soient plus sur la voie des normes, leur utilisation peut être justifiée dans certains cas, à mon avis, car:
- L'intérêt renouvelé des fournisseurs de navigateurs non implémentés peut les remettre directement
- La pénétration du marché de la mise en œuvre de navigateurs (à base de chrome) est élevée
- Google (le principal contributeur de Chromium) n'a pas donné de date de fin de vie aux API
Cependant, si «certains cas» englobe le vôtre, c'est à vous de décider.
* BakedGoods est maintenu par nul autre que ce gars ici :)