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: Diese Funktion ist in Web Workers verfügbar.

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

Syntax

js
getDirectory()

Parameter

Keine.

Rückgabewert

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

Ausnahmen

SecurityError DOMException

Wird ausgelöst, wenn der Browser das angeforderte Verzeichnis nicht dem lokalen OPFS zuordnen kann, beispielsweise aufgrund von Speicherplatz- oder Arbeitsspeicherbeschränkungen. Außerdem in einigen Browsern ausgelöst, wenn getDirectory() im privaten Browsing-Modus aufgerufen wird.

UnknownError DOMException

Wird in einigen Browsern ausgelöst, wenn getDirectory() im privaten Browsing-Modus aufgerufen wird.

Beispiele

Die folgende asynchrone Event-Handler-Funktion ist innerhalb eines Web Workers enthalten. Beim Empfang einer Nachricht vom Haupt-Thread:

  1. Holt ein FileSystemDirectoryHandle, das die Wurzel des OPFS darstellt, mit getDirectory(), und speichert es in der Variablen root.
  2. Ruft einen Datei-Handle mithilfe von FileSystemDirectoryHandle.getFileHandle() ab.
  3. Erstellt einen synchronen Datei-Zugriffshandle mit FileSystemFileHandle.createSyncAccessHandle().
  4. Ermittelt die Größe der Datei und erstellt einen ArrayBuffer, um sie zu enthalten.
  5. Liest und schreibt in die Datei.
  6. Speichert die Änderungen auf der Festplatte und schließt den synchronen Zugriffshandle.
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 implementierten sie auf diese Weise. Alle aktuellen Browser, die diese Methoden unterstützen, implementieren sie jedoch als synchrone Methoden.

Spezifikationen

Specification
File System
# dom-storagemanager-getdirectory

Browser-Kompatibilität

Siehe auch