StorageManager: getDirectory()-Methode

Baseline 2023

Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Die getDirectory()-Methode der StorageManager-Schnittstelle wird verwendet, um eine Referenz zu einem FileSystemDirectoryHandle-Objekt zu erhalten, das Zugriff auf ein Verzeichnis und dessen Inhalte erlaubt, die im origin private file system (OPFS) gespeichert sind.

Syntax

js
getDirectory()

Parameter

Keine.

Rückgabewert

Ein Promise, das mit einem FileSystemDirectoryHandle-Objekt erfüllt wird.

Ausnahmen

SecurityError DOMException

Wird ausgelöst, wenn der Benutzeragent das angeforderte Verzeichnis nicht auf das lokale OPFS abbilden kann.

Beispiele

Die folgende asynchrone Ereignis-Handler-Funktion ist innerhalb eines Web Workers enthalten. Beim Empfang einer Nachricht vom Hauptthread führt sie:

  1. Ruft einen FileSystemDirectoryHandle ab, der die Wurzel des OPFS darstellt, und speichert ihn in der Variable root.
  2. Holt einen Datei-Handle mit FileSystemDirectoryHandle.getFileHandle().
  3. Erstellt einen synchronen Datei-Zugriffs-Handle mit FileSystemFileHandle.createSyncAccessHandle().
  4. Ermittelt die Größe der Datei und erstellt einen ArrayBuffer, um diese zu enthalten.
  5. Lese- und Schreibvorgänge in die Datei ausführt.
  6. Persistiert die Änderungen auf die Festplatte und schließt den synchronen Zugriffs-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();
};

Hinweis: In früheren Versionen der Spezifikation wurden close(), flush(), getSize() und truncate() fälschlicherweise als asynchrone Methoden spezifiziert, und ältere Versionen einiger Browser implementieren sie auf diese Weise. Allerdings implementieren alle aktuellen Browser, die diese Methoden unterstützen, sie als synchrone Methoden.

Spezifikationen

Specification
File System Standard
# dom-storagemanager-getdirectory

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch