你知道 js 可以在浏览器中读写本地文件(包括目录)吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
LonnyWong
V2EX    程序员

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

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

    我在实现 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     Solana     3241 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    orld is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 11:44 PVG 19:44 LAX 04:44 JFK 07:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86