FileSystemFileHandle
Baseline 2023 *
Новое
С марта 2023 года данная функция работает на последних версиях устройств и браузеров. Возможно, она не работает на старых устройствах или браузерах.
* Некоторые части данной функции могут иметь различный уровень поддержки.
Безопасный контекст: Данная функция доступна только в безопасных контекстах (HTTPS), в некоторых или всех поддерживающих браузерах.
Примечание: Данная функция доступна в Web Workers.
Интерфейс FileSystemFileHandle API файловой системы представляет собой дескриптор элемента файловой системы. К интерфейсу можно обратиться через метод window.showOpenFilePicker().
Обратите внимание, что операции чтения и записи зависят от разрешений доступа к файлам, которые не сохраняются после обновления страницы, если не открыты другие вкладки для этого источника. Метод queryPermission интерфейса FileSystemHandle может быть использован для проверки состояния разрешений перед доступом к файлу.
Свойства экземпляра
Наследует свойства от родительского класса FileSystemHandle.
Методы экземпляра
Наследует методы от родительского класса FileSystemHandle.
getFile()-
Возвращает
Promise, который разрешается до объектаFile, представляющего состояние файла на диске, представленного дескриптором. createSyncAccessHandle()-
Возвращает
Promise, который разрешается до объектаFileSystemSyncAccessHandle, который можно использовать для синхронного чтения и записи файла. Синхронная природа этого метода обеспечивает преимущества производительности, но он может использоваться только внутри специализированных Web Workers. createWritable()-
Возвращает
Promise, который разрешается до нового объектаFileSystemWritableFileStream, который можно использовать для записи в файл.
Примеры
Чтение файла
Следующая асинхронная функция предоставляет средство выбора файла и, после выбора файла, использует метод getFile() для получения содержимого.
async function getTheFile() {
const pickerOpts = {
types: [
{
description: "Images",
accept: {
"image/*": [".png", ".gif", ".jpeg", ".jpg"],
},
},
],
excludeAcceptAllOption: true,
multiple: false,
};
// open file picker
const [fileHandle] = await window.showOpenFilePicker(pickerOpts);
// get file contents
const fileData = await fileHandle.getFile();
return fileData;
}
Запись в файл
Следующая асинхронная функция записывает заданное содержимое в дескриптор файла, а значит и на диск.
async function writeFile(fileHandle, contents) {
// Create a FileSystemWritableFileStream to write to.
const writable = await fileHandle.createWritable();
// Write the contents of the file to the stream.
await writable.write(contents);
// Close the file and write the contents to disk.
await writable.close();
}
Синхронное чтение и запись файла
Следующая асинхронная функция-обработчик событий находится внутри Web Worker. При получении сообщения из основного потока она:
- Создает синхронный дескриптор доступа к файлу.
- Получает размер файла и создаёт
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() были ошибочно определены как асинхронные методы, и старые версии некоторых браузеров реализуют их таким образом. Однако все современные браузеры, которые поддерживают эти методы, реализуют их как синхронные методы.
Спецификации
| Спецификация |
|---|
| Файловая система # api-filesystemfilehandle |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
FileSystemFileHandle |
86 | 86 | 111 | 72 | 15.2 | 109 | 111 | 74 | 15.2 | 21.0 | 109 |
createSyncAccessHandle |
102 | 102 | 111 | 88 | 15.2 | 109 | 111 | 74 | 15.2 | 21.0 | 109 |
createWritable |
86 | 86 | 111 | 72 | Нет | 109 | 111 | 74 | Нет | 21.0 | 109 |
getFile |
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/FileSystemFileHandle