Spec-Zone.ru › Web APIs

FileSystemFileHandle

Baseline 2023 *
Новое

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

* Некоторые части данной функции могут иметь различный уровень поддержки.

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

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

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

Интерфейс FileSystemFileHandle API файловой системы представляет собой дескриптор элемента файловой системы. К интерфейсу можно обратиться через метод window.showOpenFilePicker().

Обратите внимание, что операции чтения и записи зависят от разрешений доступа к файлам, которые не сохраняются после обновления страницы, если не открыты другие вкладки для этого источника. Метод queryPermission интерфейса FileSystemHandle может быть использован для проверки состояния разрешений перед доступом к файлу.

FileSystemHandle FileSystemFileHandle

Свойства экземпляра

Наследует свойства от родительского класса 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

См. также

  • API файловой системы
  • API доступа к файловой системе: упрощение доступа к локальным файлам

© 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

Spec-Zone.ru

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