Conforme mencionado anteriormente, as APIs FileSystem e File , juntamente com a API FileWriter , podem ser usadas para ler e gravar arquivos do contexto de uma guia / janela do navegador em uma máquina cliente.
Há várias coisas relacionadas às APIs FileSystem e FileWriter que você deve conhecer, algumas das quais foram mencionadas, mas vale a pena repetir:
- Atualmente, as implementações das APIs existem apenas em navegadores baseados no Chromium (Chrome e Opera)
- Ambas as APIs foram retiradas da faixa de padrões do W3C em 24 de abril de 2014 e, atualmente, são proprietárias
- A remoção das APIs (agora proprietárias) da implementação de navegadores no futuro é uma possibilidade
- Uma sandbox (um local no disco fora do qual os arquivos não podem produzir efeito) é usada para armazenar os arquivos criados com as APIs
- Um sistema de arquivos virtual (uma estrutura de diretórios que não existe necessariamente em disco da mesma forma que quando acessada pelo navegador) é usado para representar os arquivos criados com as APIs
Aqui estão exemplos simples de como as APIs são usadas, direta e indiretamente, em conjunto para fazer o seguinte:
BakedGoods *
Gravar arquivo:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Leia o arquivo:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Usando as APIs File, FileWriter e FileSystem brutas
Gravar arquivo:
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);
Leia o arquivo:
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);
Embora as APIs FileSystem e FileWriter não estejam mais na trilha dos padrões, seu uso pode ser justificado em alguns casos, na minha opinião, porque:
- O interesse renovado dos fornecedores de navegador que não implementam pode colocá-los de volta nele
- A penetração no mercado de navegadores de implementação (baseados em cromo) é alta
- O Google (o principal colaborador do Chromium) não deu uma data de final de vida para as APIs
Se "alguns casos" abrange o seu, no entanto, é para você decidir.
* BakedGoods é mantido por ninguém menos que esse cara aqui :)