FileSystemSyncAccessHandle: write() 方法
注意:此功能仅在 专用 Web Worker 中可用。
FileSystemSyncAccessHandle 接口的 write() 方法会将指定缓冲区的内容写入与该句柄关联的文件,可以选择性地在给定偏移量处写入。
位于 origin private file system 内的文件对最终用户不可见,因此不受用户可见文件系统中文件运行的相同安全检查的约束。因此,使用 FileSystemSyncAccessHandle.write() 执行的写入操作性能更高。这使得它们适用于重要的、大规模的文件更新,例如 SQLite 数据库修改。
语法
js
write(buffer, options)
参数
buffer-
一个
ArrayBuffer或ArrayBufferView(例如DataView),表示要写入文件的缓冲区。 options可选-
一个包含以下属性的选项对象
at-
一个数字,表示缓冲区应写入文件的起始位置的字节偏移量。
返回值
一个数字,表示写入文件的字节数。
异常
InvalidStateErrorDOMException-
如果关联的访问句柄已关闭,或者文件的二进制数据修改完全失败,则会抛出此异常。
QuotaExceededError-
如果增加的数据容量超出了浏览器的 存储配额,则会抛出此异常。
TypeError-
如果底层文件系统不支持从指定文件偏移量写入文件,则会抛出此异常。
示例
以下异步事件处理函数包含在 Web Worker 中。在接收到主线程的消息后,它会:
- 创建一个同步文件访问句柄。
- 获取文件大小并创建一个
ArrayBuffer来存储它。 - 将文件内容读入缓冲区。
- 对消息进行编码并将其写入文件末尾。
- 将更改持久化到磁盘并关闭访问句柄。
js
onmessage = async (e) => {
// Retrieve message sent to work from main script
const message = e.data;
// Get handle to draft file
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
// Get sync access handle
const accessHandle = await draftHandle.createSyncAccessHandle();
// Get size of the file.
const fileSize = accessHandle.getSize();
// Read file content to a buffer.
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
// Write the message to the end of the file.
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
// Persist changes to disk.
accessHandle.flush();
// Always close FileSystemSyncAccessHandle if done.
accessHandle.close();
};
注意: 在规范的早期版本中,close()、flush()、getSize() 和 truncate() 被错误地指定为异步方法,并且一些旧版本的浏览器以这种方式实现它们。然而,所有支持这些方法的当前浏览器都将其实现为同步方法。
规范
| 规范 |
|---|
| 文件系统 # api-filesystemsyncaccesshandle-write |
浏览器兼容性
加载中…