StorageManager: метод getDirectory()
Базовая версия 2023
Новое
С марта 2023 года эта функция работает на последних версиях устройств и браузеров. Возможно, эта функция не будет работать на старых устройствах или браузерах.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод getDirectory() интерфейса StorageManager используется для получения ссылки на объект FileSystemDirectoryHandle, позволяющий получить доступ к каталогу и его содержимому, хранящемуся в частной файловой системе происхождения (OPFS).
Синтаксис
getDirectory()
Параметры
Нет.
Возвращаемое значение
Объект Promise, который завершается объектом FileSystemDirectoryHandle.
Исключения
-
SecurityErrorDOMException -
Выбрасывается, если пользовательский агент не может сопоставить запрашиваемый каталог с локальной OPFS.
Примеры
Следующая асинхронная функция обработчика событий находится внутри Web Worker. Получив сообщение из основного потока, она:
- Получает
FileSystemDirectoryHandle, представляющий корень OPFS, используяgetDirectory(), сохраняя его в переменнойroot. - Получает дескриптор файла с помощью
FileSystemDirectoryHandle.getFileHandle(). - Создает синхронный дескриптор доступа к файлу с помощью
FileSystemFileHandle.createSyncAccessHandle(). - Получает размер файла и создаёт
ArrayBufferдля его хранения. - Читает и записывает в файл.
- Сохраняет изменения на диске и закрывает синхронный дескриптор доступа.
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 |
См. также
© 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