Como se mencionó anteriormente, las API FileSystem y File , junto con FileWriter API , se pueden usar para leer y escribir archivos desde el contexto de una pestaña / ventana del navegador a una máquina cliente.
Debe tener en cuenta varias cosas relacionadas con las API FileSystem y FileWriter, algunas de las cuales se mencionaron, pero vale la pena repetir:
- Las implementaciones de las API actualmente solo existen en los navegadores basados en Chromium (Chrome & Opera)
- Ambas API fueron retiradas de la pista de estándares del W3C el 24 de abril de 2014, y a partir de ahora son propietarias
- La eliminación de las API (ahora propietarias) de la implementación de navegadores en el futuro es una posibilidad
- Se utiliza una caja de arena (una ubicación en el disco fuera de la cual los archivos no pueden producir ningún efecto) para almacenar los archivos creados con las API
- Se utiliza un sistema de archivos virtual (una estructura de directorio que no existe necesariamente en el disco en la misma forma que cuando se accede desde el navegador) representa los archivos creados con las API
Aquí hay ejemplos simples de cómo se usan las API, directa e indirectamente, en conjunto para hacer estas cosas:
Productos horneados *
Escribir archivo:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Leer archivo:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Uso de las API de File, FileWriter y FileSystem sin formato
Escribir archivo:
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);
Leer archivo:
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);
Aunque las API FileSystem y FileWriter ya no están en la pista de los estándares, su uso puede justificarse en algunos casos, en mi opinión, porque:
- El renovado interés de los proveedores de navegadores que no se implementan puede colocarlos nuevamente en él.
- La penetración en el mercado de la implementación de navegadores (basados en cromo) es alta
- Google (el principal contribuyente a Chromium) no ha dado una fecha de finalización de vida a las API
Sin embargo, si "algunos casos" abarca los suyos, es decisión suya.
* BakedGoods es mantenido por nada menos que este tipo aquí :)