HTML5无法直接访问本地文件系统,File System Access API(Chrome 86+等支持)允许用户授权选择文件夹并读写,但需手动触发、不支持自动监听,完整同步需结合后端比对与桌面代理协同。

HTML5 本身没有提供直接访问本地文件系统(尤其是任意文件夹)的 API,出于安全限制,浏览器不允许网页随意读写用户硬盘。所谓“本地文件夹同步”,无法通过纯前端 HTML5 实现完整双向同步,但可以借助现代 Web API 组合实现受限但实用的同步体验。
File System Access API 是当前最接近的方案
这是 Chrome 86+、Edge 91+ 等浏览器支持的官方标准 API,允许网页请求用户授权访问特定文件或文件夹(需用户主动选择),并获得持久化读写权限。
- 调用
window.showDirectoryPicker()弹出文件夹选择器,用户手动选取目标文件夹 - 返回一个
FileSystemDirectoryHandle,可用于遍历、读取、创建或修改其中的文件 - 配合
handle.requestPermission({mode: 'readwrite'})可申请长期写入权限(需用户确认) - 注意:该 API 不支持后台自动监听文件变化,必须由用户触发或通过定时轮询模拟“同步”
同步逻辑需分两端设计
真正的“同步”本质是比对与更新,前端只能完成其中一部分:
- 本地侧:用 File System Access API 获取当前文件夹快照(文件名、大小、最后修改时间),生成简易哈希或时间戳指纹
-
服务端侧:需后端存储远程状态(如数据库记录每个文件的 etag 或 mtime),并提供比对接口(如
/sync?folderId=xxx) - 差异处理:前端将本地指纹发给服务端,服务端返回需上传/下载/删除的文件列表,再调用对应 API 执行操作
无法绕过的关键限制
这些不是技术难点,而是浏览器安全模型决定的硬性边界:
立即学习“前端免费学习笔记(深入)”;
- 不能自动扫描 C:\ 或 ~/Documents 等路径——必须由用户逐次点击选择
- 不能监听文件系统事件(如
fs.watch)——需轮询或依赖用户再次打开页面触发检查 - 无权访问其他网站或本地应用的文件——沙盒隔离严格
- PWA 安装后也无法提升文件系统权限,仍需用户授权
替代思路:结合桌面桥接更实用
若需真正可靠的文件夹同步,建议采用混合架构:
- 前端用 File System Access API 处理用户显式选中的文件夹,并上传变更摘要
- 配套轻量级桌面代理(如用 Electron、Tauri 或 Python + WebView 封装)监听本地文件夹、计算差异、与服务端通信
- 网页通过
postMessage或本地 HTTP 接口与代理协同,实现“看起来像网页同步”的体验



















