StorageManager: getDirectory() method
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
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).
Syntax
js
getDirectory()
Parameters
None.
Return value
A Promise that fulfills with a FileSystemDirectoryHandle object.
Exceptions
SecurityErrorDOMException-
Thrown if the user agent is not able to map the requested directory to the local OPFS.
Examples
The following asynchronous event handler function is contained inside a Web Worker. On receiving a message from the main thread it:
- Gets a
FileSystemDirectoryHandlerepresenting the root of the OPFS usinggetDirectory(), storing it in therootvariable. - 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
ArrayBufferto contain it. - Reads and writes to the file.
- Persists the changes to disk and closes the synchronous access handle.
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();
};
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.
Specifications
| Specification |
|---|
| File System Standard # dom-storagemanager-getdirectory |
Browser compatibility
BCD tables only load in the browser