V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LonnyWong
V2EX  ›  程序员

你知道 js 可以在浏览器中读写本地文件(包括目录)吗?

  •  
  •   LonnyWong · 2023-03-17 09:16:32 +08:00 via iPhone · 2640 次点击
    这是一个创建于 403 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在实现 https://github.com/trzsz/trzsz.js ( 在浏览器中类似 rz / sz 那样上传和下载文件 )时,发现了 Chrome 等浏览器支持 js 读写本地文件,详见 https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API

    一开始实现的 trzsz ( trz / tsz ) 只支持上传和下载文件,不支持目录,所以没太关注目录方面的描述。等到后来 trzsz ( trz / tsz ) 开始支持上传和下载目录,想当然认为 js 能在浏览器中读写文件已经很好了,没想着 js 是否也可以在浏览器中读写目录。

    直到有人问起 trzsz ( trz / tsz ) 在浏览器中是不支持目录传输吗,又再去看了一次 API 文档,才发现目录相关的 API 被我忽略了。js 有读写目录的权限,https://github.com/trzsz/trzsz.js 就可以和其他终端一样,上传和下载目录了,下载多个文件时也不用多次弹出对话框了。Cool…

    11 条回复    2023-03-17 13:37:01 +08:00
    weijancc
        1
    weijancc  
       2023-03-17 09:28:44 +08:00
    vscode web 版本可以直接打开本地文件夹, 就是用这个 api
    gogogo2000
        2
    gogogo2000  
       2023-03-17 09:28:54 +08:00
    当用户选择一个文件 /文件夹后,js 本来就是可以随便读取的。读取文件夹不是 w3c 标准的,但是目前主流浏览器都支持。

    想要不经过用户同意就读取任意文件夹那肯定是不可能的
    gogogo2000
        3
    gogogo2000  
       2023-03-17 09:29:49 +08:00
    @weijancc vscode 的后端是 nodejs 的,nodejs 不属于浏览器,不受浏览器限制,通过 fs 系列 API 可以任意读取任何文件。
    weijancc
        4
    weijancc  
       2023-03-17 09:31:16 +08:00
    @gogogo2000 你说的是 code-server, 有个纯 web 版本的
    sombruh
        5
    sombruh  
       2023-03-17 09:38:12 +08:00
    LonnyWong
        6
    LonnyWong  
    OP
       2023-03-17 09:38:50 +08:00 via iPhone
    @gogogo2000
    js 刚出世时,是可以直接读写所有文件的,这导致了很严重的安全问题。后来禁止 js 读写任何文件,又导致很多功能实现不了。取得用户授权后,允许在指定范围内读写文件,这是一个很好的权衡。
    xu45525584
        7
    xu45525584  
       2023-03-17 09:46:31 +08:00
    。浏览器 兼容性没跟上,用的话 基本只能指定 chrome
    LonnyWong
        8
    LonnyWong  
    OP
       2023-03-17 10:06:56 +08:00 via iPhone
    @xu45525584 用的时候不用判断浏览器,直接判断 API 是否存在就好。当 API 不存在时,做好降级处理。等其他浏览器以后支持了,也不用再修改什么。
    gogogo2000
        9
    gogogo2000  
       2023-03-17 10:26:12 +08:00
    @LonnyWong 知道的,ie 时代的 js 就是群魔乱舞,还有一大堆 js 病毒。

    退一步说即便 js 不行,ie 时代还有 activex ,还有 flash ,能随意读取文件的方法很多……
    oldshensheep
        10
    oldshensheep  
       2023-03-17 10:43:10 +08:00 via Android
    最新版的 Firefox 也支持了
    xiaojie668329
        11
    xiaojie668329  
       2023-03-17 13:37:01 +08:00 via iPhone
    用过。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3266 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:37 · PVG 20:37 · LAX 05:37 · JFK 08:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.