FileSystemSyncAccessHandle: метод write()
Базовая версия 2023
Новое
С марта 2023 года эта функция работает на последних версиях устройств и браузеров. Возможны проблемы с её работой на более старых устройствах и браузерах.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна только в посвященных веб-воркерах.
Метод write() интерфейса FileSystemSyncAccessHandle записывает содержимое указанного буфера в файл, связанный с этим обработчиком, необязательно по заданному смещению.
Файлы в частной файловой системе происхождения не видны конечным пользователям и, следовательно, не подвергаются тем же проверкам безопасности, что и методы, работающие с файлами в файловой системе, видимой пользователю. В результате, записи, выполняемые с помощью FileSystemSyncAccessHandle.write() значительно более производительны. Это делает их подходящими для существенных и масштабных обновлений файлов, таких как изменения базы данных SQLite.
Синтаксис
write(buffer, options)
Параметры
buffer-
An
ArrayBufferилиArrayBufferView(например,DataView), представляющий буфер, который будет записан в файл. optionsНеобязательный-
Объект опций, содержащий следующие свойства:
at-
Число, представляющее смещение в байтах от начала файла, в котором должен быть записан буфер.
Возвращаемое значение
Число, представляющее количество байтов, записанных в файл.
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается, если связанный обработчик доступа уже закрыт или если изменение двоичных данных файла полностью провалилось.
-
QuotaExceededErrorDOMException -
Выбрасывается, если увеличенный объем данных превышает квоту браузера на хранилище.
TypeError-
Выбрасывается, если файловая система по умолчанию не поддерживает запись файла по указанному смещению в файле.
Примеры
Следующая асинхронная функция-обработчик событий содержится внутри веб-воркера. При получении сообщения от основного потока она:
- Создает синхронный обработчик доступа к файлу.
- Получает размер файла и создает
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() были ошибочно указаны как асинхронные методы, и более старые версии некоторых браузеров реализуют их таким образом. Однако все современные браузеры, поддерживающие эти методы, реализуют их как синхронные методы.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
write |
102 | 102 | 111 | 88 | 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/FileSystemSyncAccessHandle/write