我在实现 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…
1
weijancc 2023-03-17 09:28:44 +08:00
vscode web 版本可以直接打开本地文件夹, 就是用这个 api
|
2
gogogo2000 2023-03-17 09:28:54 +08:00
当用户选择一个文件 /文件夹后,js 本来就是可以随便读取的。读取文件夹不是 w3c 标准的,但是目前主流浏览器都支持。
想要不经过用户同意就读取任意文件夹那肯定是不可能的 |
3
gogogo2000 2023-03-17 09:29:49 +08:00
@weijancc vscode 的后端是 nodejs 的,nodejs 不属于浏览器,不受浏览器限制,通过 fs 系列 API 可以任意读取任何文件。
|
4
weijancc 2023-03-17 09:31:16 +08:00
@gogogo2000 你说的是 code-server, 有个纯 web 版本的
|
5
sombruh 2023-03-17 09:38:12 +08:00
|
6
LonnyWong OP @gogogo2000
js 刚出世时,是可以直接读写所有文件的,这导致了很严重的安全问题。后来禁止 js 读写任何文件,又导致很多功能实现不了。取得用户授权后,允许在指定范围内读写文件,这是一个很好的权衡。 |
7
xu45525584 2023-03-17 09:46:31 +08:00
。浏览器 兼容性没跟上,用的话 基本只能指定 chrome
|
8
LonnyWong OP @xu45525584 用的时候不用判断浏览器,直接判断 API 是否存在就好。当 API 不存在时,做好降级处理。等其他浏览器以后支持了,也不用再修改什么。
|
9
gogogo2000 2023-03-17 10:26:12 +08:00
|
10
oldshensheep 2023-03-17 10:43:10 +08:00 via Android
最新版的 Firefox 也支持了
|
11
xiaojie668329 2023-03-17 13:37:01 +08:00 via iPhone
用过。。
|