相比于本地应用而言,目前在Web应用中对于文件系统的操作一直是比较困难的。
然而,在js刚出世时,是可以直接读写所有文件的,这导致当时产生了很多js病毒,带来了很严重的安全问题。后来才禁止了js读写任何文件,这又导致很多功能(比如选择文件并修改保存)基本是无法实现的,只能通过上传、修改、下载等不够流畅的交互来实现。
但是现在,随着web应用的不断发展,上述痛点已经被File System Access API基本解决了。
一、File System Access API
File System Access API 是一个允许 Web 应用访问和操作用户设备文件系统的 API。通过这个 API,我们可以在用户的许可下,读取和修改文件,以及访问目录结构。
1、window.showOpenFilePicker()
显示一个允许用户选择一个或多个文件的文件选择器。异步返回一个FileSystemFileHandle对象的数组。
2、window.showSaveFilePicker()
显示一个允许用户保存文件的文件选择器,可以选择现有文件或输入新文件的名称。 异步返回一个FileSystemFileHandle对象。
3、window.showDirectoryPicker()
显示一个目录选择器,允许用户选择一个目录。异步返回一个FileSystemDirectoryHandle对象
4、DataTransferItem.getAsFileSystemHandle()
在拖动事件中使用,如果拖动元素是一个文件则异步返回一个FileSystemFileHandle对象的数组。 如果拖动元素是一个目录则异步返回一个FileSystemFileHandle对象。
5、StorageManager.getDirectory()
从当前网站或者应用程序中的私有存储空间(origin private file system)中读取目录及内容。
注意:
访问 OPFS 中的文件不需要权限提示。
清除网站的数据会删除 OPFS。
OPFS 受浏览器的存储空间配额限制。
二、使用示例
1、读取文件
要读取一个文件,我们首先需要让用户选择一个文件。使用 File System Access API,我们可以通过 window.showOpenFilePicker() 函数实现这一目的:
1 | async function readFile() { |
这个函数会触发一个文件选择对话框,用户可以在其中选择一个文件。成功获取到文件后,我们可以通过 fileHandle.getFile() 获得一个 File 对象,并使用 file.text() 读取文件内容。
2、保存文件
与读取文件类似,我们需要通过 window.showSaveFilePicker() 函数让用户选择一个文件位置来保存文件:
1 | async function saveFile(contents) { |
window.showSaveFilePicker() 返回一个文件句柄,我们可以通过 fileHandle.createWritable() 创建一个可写流,并使用 writable.write() 将内容写入文件。最后,使用 writable.close() 关闭流。
三、兼容性与权限
截至 2021 年 9 月,File System Access API 主要在 Chromium 内核的浏览器上得到支持,包括 Chrome、Edge 和 Opera。不过,随着技术的发展,更多的浏览器可能会支持这一 API。为了确保你的应用在不同的浏览器上运行良好,请务必检查浏览器的兼容性。
版权声明:本文为CSDN博主「一贱你就笑~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38629292/article/details/129659106