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
SecurityError
DOMException
-
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
FileSystemDirectoryHandle
representing the root of the OPFS usinggetDirectory()
, storing it in theroot
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.
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