Улучшения API для работы с файлами в браузере

Поддержка нескольких устройств чтения и записи для FileSystemSyncAccessHandle и эксклюзивная запись для FileSystemWritableFileStream.

Несколько устройств чтения и записи для FileSystemSyncAccessHandle

Исходная частная файловая система (иногда называемая файловой системой сегмента) позволяет разработчикам получать доступ к файлам, оптимизированным для максимальной производительности чтения и записи. Это происходит через объекты FileSystemSyncAccessHandle . В настоящее время попытка открыть несколько объектов FileSystemSyncAccessHandle для одной и той же записи файла завершается с ошибкой NoModificationAllowedError . Поскольку существуют случаи использования, когда это ограничение является ограничивающим, в Chrome 121 представлен новый параметр mode для метода FileSystemFileHandle.createSyncAccessHandle() со следующими допустимыми строковыми значениями:

  • "readwrite" : это текущее значение по умолчанию. После открытия разрешены любые методы FileSystemSyncAccessHandle . Разрешен только один экземпляр FileSystemSyncAccessHandle .
  • "read-only" : разрешает несколько читателей. После открытия в FileSystemSyncAccessHandle разрешены только методы чтения: read() , getSize() и close() . Можно создать несколько экземпляров FileSystemSyncAccessHandle , если все они находятся в режиме только для чтения.
  • "readwrite-unsafe" : разрешает несколько авторов. После открытия разрешены любые методы FileSystemSyncAccessHandle . Можно создать несколько экземпляров FileSystemSyncAccessHandle , если все они находятся в небезопасном для чтения и записи режиме.

Текущее поведение сохраняется за счет сохранения опции "readwrite" по умолчанию, что позволяет одновременно использовать только один экземпляр. Если сайту необходимо открыть несколько объектов FileSystemSyncAccessHandle , но не требуется выполнять запись, следует использовать параметр "read-only" . Наконец, последний вариант "readwrite-unsafe" разрешает несколько экземпляров, а также чтение и запись. В этом случае записи могут быть непростыми, если они выполняются с нескольких вкладок, и сайтам потребуется предоставить собственную схему блокировки.

const handle1 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});
// This will succeed:
const handle2 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});

Эксклюзивный модуль записи для FileSystemWritableFileStream

В отличие от FileSystemSyncAccessHandle , сегодня для каждой записи файла можно создать несколько экземпляров FileSystemWritableFileStream . Чего не хватает, так это способа предоставить возможность эксклюзивному автору. Chrome 121 добавляет необязательный параметр mode в метод FileSystemAccessFileHandle.createWritable() , который имеет следующие значения:

  • "exclusive" режим: одновременно может существовать только один писатель.
  • "siloed" режим: это текущий режим по умолчанию. Каждый созданный модуль записи будет иметь свой собственный файл подкачки.
const writable1 = await handle.createWritable({mode: 'exclusive'});
// This will fail:
const writable2 = await handle.createWritable();

Поддержка браузера

Обе функции — несколько устройств чтения и записи для FileSystemSyncAccessHandle и эксклюзивная запись для FileSystemWritableFileStream — поддерживаются начиная с Chrome 121.

Войдите в пробную версию для разработчиков

Чтобы принять участие в пробной версии для разработчиков и протестировать эту функцию до запуска Chrome 121, установите для флага #file-system-access-locking-scheme в chrome://flags значение Enabled . Это позволит вам протестировать эту функцию локально на вашем компьютере.

Благодарности

Эту статью рецензировали Дасыль Ли , Натан Меммотт и Рэйчел Эндрю .