如前所述,FileSystem 和 File API 以及 FileWriter API 可用于从浏览器选项卡/窗口的上下文读取和写入文件到客户端计算机。
您应该注意一些与 FileSystem 和 FileWriter API 有关的事情,其中一些已经提到,但值得重复:
- API 的实现目前仅存在于基于 Chromium 的浏览器(Chrome 和 Opera)中
- 这两个 API 均已于 2014 年 4 月 24 日脱离 W3C 标准轨道,并且现在是专有的
- 将来有可能从实现浏览器中删除(现在是专有的)API
-
沙盒(磁盘上的一个位置,文件在该位置之外不会产生任何影响)用于存储使用 API 创建的文件
- 使用虚拟文件系统(在磁盘上的目录结构不一定以与从浏览器中访问时相同的形式存在)表示使用 API 创建的文件李>
以下是如何直接和间接使用 API 来执行这些操作的简单示例:
BakedGoods*
写入文件:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
读取文件:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
使用原始 File、FileWriter 和 FileSystem API
写入文件:
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);
读取文件:
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);
鉴于 FileSystem 和 FileWriter API 的当前状态,它们用于读取和写入文件的用途目前并不构成执行这些操作的“HTML5 方式”。
不过,未实现的浏览器供应商对 API 的重新兴趣可能会使它们重新回到标准轨道上。再加上基于 Chromium 的浏览器的高市场渗透率,以及谷歌(Chromium 的主要贡献者)尚未给出 API 的生命周期终止日期的事实,应该足以证明它们在某些情况下的使用是合理的。
*BakedGoods 由这里的这个人维护 :)