浏览器工程

File System Access API:文件句柄持久化不等于永久授权

处理 showOpenFilePicker、句柄存储、queryPermission、requestPermission、文件变更验证与不支持浏览器降级,避免越过用户授权。

这类问题看似集中在一个 API 或参数上,真正决定可用性的却是状态归属、资源上限和失败后的恢复方式。 文件句柄可以存进 IndexedDB,但权限可能在会话、浏览器或系统策略变化后回到 prompt。恢复任务时必须重新查询权限,并在用户动作中请求,不能把保存句柄描述成后台永久访问。

浏览器能力由版本、权限、页面可见性和设备策略共同决定。实现需要能力探测与可解释降级,不能把某一台开发机上的 API 存在当成产品契约。

先把实现决策说清楚

实现之前先列出不可违反的不变量,再为性能与体验留出调节参数。参数可以灰度,身份、权限和终态规则不能在运行时随意漂移。

  • 句柄仅与具体任务和本地设备绑定,不通过信令或分析上传序列化信息。
  • 重新打开后比较文件大小、修改时间和内容摘要,句柄指向文件也可能被替换。
  • 不支持 API 或权限拒绝时退回普通文件选择器,并保留已接收进度。

句柄改善的是重选体验,不改变用户控制权。每次恢复都重新确认权限与内容身份,产品承诺才与浏览器边界一致。

最容易漏掉的失败路径

边界条件会把隐藏假设变成真实事故。弱网、刷新、并发和容量上限必须组合测试,因为单独出现时它们往往都能被重试掩盖。

  • 启动时自动 requestPermission,不在用户动作里调用导致浏览器拒绝。
  • 句柄仍有效就跳过摘要,用户覆盖源文件后把新内容续进旧任务。
  • UI 显示“永久访问”,用户无法理解撤权后为何任务突然失败。

上线前怎样验证

验证需要先写预期状态轨迹,再执行故障注入。每个阶段同时核对用户可见结果、两端协议状态、持久记录和资源计数,才能证明闭环成立。

  1. 授权、拒绝、撤销、文件移动和内容覆盖后分别恢复同一任务。
  2. Chrome 能力路径与其他浏览器普通选择路径跑相同完整性用例。
  3. 检查导出数据、日志和同步记录,确保不包含句柄、真实路径或权限细节。

完成并不等于主路径跑通,而是每个终态都能对账、每个自动动作都受用户意图约束、每个成本都有明确上限。

把方法变成一次真实连接

打开 uCopy,让两台设备在浏览器里安全连接并开始传输。

开始免费使用