结合原始私有文件系统的文件系统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/
最新文章
- 古籍OCR API:让中华古籍文化焕发新生
- 如何在Java、Python语言中调用Mistral AI API:提示词生成文本案例
- AI的突出问题:API安全
- 如何在 Angular 中实现 REST API 调用:博客应用示例解析
- 如何获取bing搜索 API Key 密钥(分步指南)
- 银行卡认证API在Java、Python、PHP中的使用教程
- 如何使用API:初学者的分步教程
- 深入解析 Azure OpenAI Assistants API
- OpenAI Assistant API:实现交互式聊天机器人
- 深入解析Vue Composition API的watch()方法 – Netlify
- 供应链管理中的 EDI 与 API 趋势解析
- 提升 API 和数据库性能的有效策略