结合原始私有文件系统的文件系统API - WebKit
应用程序与本地文件交互是非常常见的需求。例如,用户通常需要打开文件、进行修改并保存文件。然而,对于 Web 应用程序来说,这种操作可能会变得复杂。虽然可以通过 IndexedDB API、具有“文件”类型的 HTML 输入元素或带有“下载”属性的 HTML 锚点元素来模拟文件操作,但这些方法需要对相关标准有深入的理解,并且需要精心设计以确保良好的用户体验。此外,对于频繁的文件操作或处理大文件,这些方法的性能可能并不理想。
文件系统 API 的出现,为 Web 应用程序提供了一种轻松高效的文件访问方式。它允许开发者直接创建、打开、读取和写入文件,同时支持创建目录并枚举其内容。
源私有文件系统
在不同浏览器的实现中,源私有文件系统中的条目未必直接映射到用户的本地文件系统。例如,这些条目可能是存储在某个数据库中的对象。这意味着通过文件系统 API 创建的文件或目录可能无法轻松地从浏览器外部访问。
浏览器支持
文件系统 API 的支持情况因浏览器和操作系统版本而异。例如:
- macOS 12.2 及以上版本支持文件系统 API。
- 在 macOS 12.4 和 iOS 15.4 的 Safari 浏览器中,引入了
FileSystemFileHandle的getFile()方法。
文件系统 API 接口
WebKit 当前支持文件系统标准中的以下四个接口:
FileSystemHandle:表示文件系统中的一个条目。FileSystemDirectoryHandle:用于操作目录。FileSystemFileHandle:用于操作文件。FileSystemSyncAccessHandle:支持同步文件读写操作。
接下来,我们通过一些示例来了解如何使用这些接口。
示例
访问源私有文件系统
开发者可以通过文件系统 API 访问源私有文件系统中的条目,从而实现文件的读取和写入操作。
创建目录或文件
通过类似根目录的 FileSystemDirectoryHandle 对象,可以使用 getDirectoryHandle() 和 getFileHandle() 方法访问具有特定名称的子目录或文件。
移动或重命名目录或文件
文件系统 API 支持对目录或文件进行移动或重命名操作,这为文件管理提供了更大的灵活性。
解析从目录条目到其后代的路径
要确定某个 FileSystemHandle 是否是现有 FileSystemDirectoryHandle 的后代,并获取它们的相对路径,可以使用 resolve() 方法。该方法返回一个数组,其中包含路径的各个组件名称。
枚举目录中的内容
如果开发者不知道目标文件或目录的名称,可以通过 keys()、values() 和 entries() 方法返回的异步迭代器枚举目录内容,从而获取所有子条目。
删除目录或文件
使用 FileSystemDirectoryHandle 对象,可以通过 removeEntry() 方法按名称删除子条目。
读取文件
文件系统 API 提供了多种方法来读取文件内容,包括异步和同步操作,以满足不同的性能需求。
在工作线程中读写文件
与返回 Promise 的 getFile() 方法不同,read() 方法是同步的,因此性能更高。如果需要实现高效的文件访问,可以使用 FileSystemSyncAccessHandle。例如:
- 使用
FileSystemSyncAccessHandle的同步write()方法写入文件。 - 为了实现同步读写操作,
FileSystemSyncAccessHandle必须对文件条目具有独占访问权限。如果之前的FileSystemSyncAccessHandle未正确关闭,则无法在同一条目上创建新的FileSystemSyncAccessHandle。
总结
如果您的 Web 应用程序需要与文件进行交互,建议尝试新的文件系统 API。它提供了类似于本地文件系统 API 的接口,并且性能经过优化,能够满足频繁文件操作和大文件处理的需求。
原文链接: https://webkit.org/blog/12257/the-file-system-access-api-with-origin-private-file-system/
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- API文档:深入指南与前沿免费工具 – Apidog
- 交叉熵的Numpy实现:从理论到实践
- Google DeepMind发布 Genie 3与Shopify:2小时上线电商3D样板间实战
- Gemini Deep Research 技术实战:利用 Gemini Advanced API 构建自动化的深度研究 Agent
- FLUX.1 Kontext API 使用完全指南:解锁文本驱动的智能图像编辑
- 如何防范User-Agent信息伪装引发的API访问风险
- 苹果支付流程:从零开始的接入指南
- 全面掌握 OpenAPI 规范:定义、生成与集成指南
- 深入解析granularity是什么?颗粒度中文详解
- 开发者如何利用缓存技术提升API性能
- Orbitz API 全攻略:旅行社高效整合酒店、航班与租车服务的必读指南
- REST API命名规范的终极指南:清晰度和一致性的最佳实践