iOS Safari中OPFS调用createSyncAccessHandle报'invalid platform file handle'错误
问题分析与解决方案
核心原因
你遇到的invalid platform file handle错误,本质是Safari iOS(包括15.2+版本)并不支持createSyncAccessHandle()这个API。虽然Safari从15.2开始支持OPFS,但仅实现了File System Access API的子集,同步访问句柄(SyncAccessHandle)属于未覆盖的功能,只有桌面端Chrome/Firefox等浏览器完整支持。
替代方案:使用异步写入API
把同步访问的逻辑替换为Safari支持的createWritable()异步写入方法,完全可以满足你保存base64文本的需求,同样能避免内存溢出问题。修改后的Worker代码如下:
const root = await navigator.storage.getDirectory(); const saveHandle = await root.getFileHandle(input.fileName, { create: true }); // 替换同步访问句柄为异步可写流 const writableStream = await saveHandle.createWritable(); // 写入base64内容 await writableStream.write(input.base64Text); // 关闭流完成写入 await writableStream.close();
补充说明
- 异步写入的性能完全能适配你的场景:数据会直接流式写入OPFS磁盘存储,不会在RAM中堆积,同样解决内存崩溃问题。
- 验证兼容性:
createWritable()是Safari iOS 15.2+明确支持的OPFS API,完全覆盖你的目标版本15.7.3。 - 后续读取:如果需要读取文件,同样使用异步API,比如
saveHandle.getFile()获取File对象后再读取内容。
内容的提问来源于stack exchange,提问作者mshaw
相关产品推荐
相关产品推荐

