Spec-Zone.ru › Web APIs

StorageManager: метод getDirectory()

Базовая версия 2023
Новое

С марта 2023 года эта функция работает на последних версиях устройств и браузеров. Возможно, эта функция не будет работать на старых устройствах или браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Метод getDirectory() интерфейса StorageManager используется для получения ссылки на объект FileSystemDirectoryHandle, позволяющий получить доступ к каталогу и его содержимому, хранящемуся в частной файловой системе происхождения (OPFS).

Синтаксис

getDirectory()

Параметры

Нет.

Возвращаемое значение

Объект Promise, который завершается объектом FileSystemDirectoryHandle.

Исключения

SecurityError DOMException

Выбрасывается, если пользовательский агент не может сопоставить запрашиваемый каталог с локальной OPFS.

Примеры

Следующая асинхронная функция обработчика событий находится внутри Web Worker. Получив сообщение из основного потока, она:

  1. Получает FileSystemDirectoryHandle, представляющий корень OPFS, используя getDirectory(), сохраняя его в переменной root.
  2. Получает дескриптор файла с помощью FileSystemDirectoryHandle.getFileHandle().
  3. Создает синхронный дескриптор доступа к файлу с помощью FileSystemFileHandle.createSyncAccessHandle().
  4. Получает размер файла и создаёт ArrayBuffer для его хранения.
  5. Читает и записывает в файл.
  6. Сохраняет изменения на диске и закрывает синхронный дескриптор доступа.
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();
};

Примечание: В более ранних версиях спецификации close(), flush(), getSize() и truncate() были ошибочно указаны как асинхронные методы, и старые версии некоторых браузеров реализуют их таким образом. Однако все современные браузеры, которые поддерживают эти методы, реализуют их как синхронные методы.

Спецификации

Спецификация
Файловая система
# dom-storagemanager-getdirectory

Совместимость браузеров

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
getDirectory 86 86 111 72 15.2 109 111 74 15.2 21.0 109

См. также

  • StorageManager
  • Navigator.storage
  • WorkerNavigator.storage
  • FileSystemDirectoryHandle

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/StorageManager/getDirectory

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API