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. This has now been amended, but some browsers still support the asynchronous versions.