HTML5是否允许您与浏览器中的本地客户端文件进行交互?

我见过一些关于在网页上访问客户机上的文件的post,也就是这个问题 。

我正在尝试跳上“我不断更新云计算”的范例,这样我的用户就可以通过访问网页来访问最新的版本。 这要求程序/网页可以以一个目录开始,recursion地检查其中的文件,并根据find的结果计算结果。 最后还应该能够将结果文件写入客户端的文件系统。

在上一个问题中的答案之一提到了Google Gears,但是现在已经停止了HTML5。 是否可以在HTML5中访问客户端目录? 怎么样?

我知道为什么通过任何网页访问本地文件是一个安全风险,但为了我的目的,我没有问题,要求用户适当的权限。

不,至less不是。 但是,您在这里有许多select。

目前你最好的select是:

  • 从桌面拖放文件,请参阅教程 。
  • 使用inputtypes文件。
    • 使用File API读取内容或提交表单。 阅读Mozilla开发者中心关于dynamic读取文件的更多信息。
    • 您可以指定multiple属性来一次读取和打开多个文件,而不必具有单独的字段。
    • 你可以有一个不可见的input和“触发点击”来打开文件打开对话框。 有关详细信息,请参阅以前的Mozilla Developer Center链接。
  • 使用FileSystem API ,它允许您创build,删除,读取,修改文件系统上的文件。 注意:你得到一个沙盒目录,你不能像这样访问整个系统。
  • 使用带有签名小程序的 Java来访问整个文件系统。 这要求用户接受签名。

Chrome 6也将支持File API

如前所述, FileSystem和File API以及FileWriter API可用于从浏览器选项卡/窗口的上下文中读取和写入文件到客户端机器。

有几个与FileSystem和FileWriter API相关的东西,你应该知道,其中一些被提到,但是值得重复:

  • 这些API的实现目前只存在于基于Chromium的浏览器(Chrome和Opera)
  • 这两个API都是2014年4月24日从W3C标准轨道中脱离出来的,现在是专有的
  • 将来从实施的浏览器中删除(现在是专有的)API是可能的
  • 一个沙盒 (磁盘上的文件不能产生任何效果的位置)用于存储使用API​​创build的文件
  • 使用虚拟文件系统 (在浏览器中访问时不必以磁盘forms存在的目录结构)代表使用API​​创build的文件

下面是一些简单的例子,说明如何直接或间接地使用API​​来完成这些工作:

烘焙食品 *

写入文件:

 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){} }); 

使用原始文件,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 APIs,它们的读写文件的使用目前并不构成做这些事情的“HTML5方法”。

然而,对于未实施的浏览器供应商对API的重新兴趣可能会使他们重新回到标准轨道上。 加上基于Chromium的浏览器的高市场渗透率以及谷歌(Chromium的主要贡献者)未向API提供和报废date的事实应该足以certificate其在某些情况下的使用。

* BakedGoods是由这个人保持在这里:)