The getDirectory() method of the StorageManager interface is used to obtain a reference to a FileSystemDirectoryHandle object allowing access to a directory and its contents, stored in the origin private file system (OPFS).
A Promise that fulfills with a FileSystemDirectoryHandle object.
The following asynchronous event handler function is contained inside a Web Worker. On receiving a message from the main thread it:
- Gets a
FileSystemDirectoryHandle representing the root of the OPFS using getDirectory(), storing it in the root variable. - Gets a file handle using
FileSystemDirectoryHandle.getFileHandle(). - Creates a synchronous file access handle using
FileSystemFileHandle.createSyncAccessHandle(). - Gets the size of the file and creates an
ArrayBuffer to contain it. - Reads and writes to the file.
- Persists the changes to disk and closes the synchronous access handle.
onmessage = async (e) => {
const message = e.data;
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
const accessHandle = await draftHandle.createSyncAccessHandle();
const fileSize = accessHandle.getSize();
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
accessHandle.flush();
accessHandle.close();
};
Note: In earlier versions of the spec, close(), flush(), getSize(), and truncate() were wrongly specified as asynchronous methods, and older versions of some browsers implement them in this way. However, all current browsers that support these methods implement them as synchronous methods.