• 请不要在回答技术问题时复制粘贴 AI 生成的内容
LonnyWong
V2EX  ›  程序员

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

  •  
  •   LonnyWong · Mar 17, 2023 via iPhone · 3758 views
    This topic created in 1153 days ago, the information mentioned may be changed or developed.

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

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

    退一步说即便 js 不行,ie 时代还有 activex ,还有 flash ,能随意读取文件的方法很多……
    oldshensheep
        10
    oldshensheep  
       Mar 17, 2023 via Android
    最新版的 Firefox 也支持了
    voidcomma
        11
    voidcomma  
       Mar 17, 2023 via iPhone
    用过。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3410 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 11:00 · PVG 19:00 · LAX 04:00 · JFK 07:00
    ♥ Do have faith in what you're doing.