为了账号安全,请及时绑定邮箱和手机立即绑定

使用javascript进行本地文件访问

使用javascript进行本地文件访问

使用javascript进行本地文件访问是否有使用JavaScript完成的本地文件操作?我正在寻找一种可以在没有安装空间的情况下完成的解决方案,例如需要AIR。具体来说,我想从文件中读取内容并将这些内容写入另一个文件。在这一点上,我并不担心获得权限,只是假设我已经拥有这些文件的完全权限。
查看完整描述

4 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

如前所述,FileSystemFile 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){}});

使用原始文件,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不再符合标准,但在我看来,在某些情况下,它们的使用是合理的,因为:

  • 来自未实现的浏览器供应商的更新兴趣可能会将它们重新置于其上

  • 实施(基于Chromium)浏览器的市场渗透率很高

  • 谷歌(Chromium的主要贡献者)尚未给出API的生命终止日期

但是,“某些情况”是否包含您自己的情况,由您决定。

* BakedGoods由这个人维持正确:)


查看完整回答
反对 回复 2019-05-27
?
撒科打诨

TA贡献1934条经验 获得超2个赞

如果用户选择文件<input type="file">,您可以使用File API 读取处理该文件。

设计不允许读取或写入任意文件。这违反了沙箱。来自维基百科 - > Javascript - >安全性

JavaScript和DOM为恶意作者提供了通过Web在客户端计算机上运行脚本的潜力。浏览器作者使用两个限制包含此风险。首先,脚本在沙箱中运行,在沙箱中,脚本只能执行与Web相关的操作,而不能执行创建文件等通用编程任务 。

2016 UPDATE:直接访问文件系统经由能够文件系统API,这是仅由铬和歌剧支持可能最终没有被实现为通过其他浏览器(与边缘的例外)。有关详细信息,请参阅Kevin的回答


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 1384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信