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

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

  •  
  •   LonnyWong · 78 天前 via iPhone · 2222 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在实现 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  
       78 天前
    vscode web 版本可以直接打开本地文件夹, 就是用这个 api
    gogogo2000
        2
    gogogo2000  
       78 天前
    当用户选择一个文件 /文件夹后,js 本来就是可以随便读取的。读取文件夹不是 w3c 标准的,但是目前主流浏览器都支持。

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

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