Mejoras de API para trabajar con archivos en el navegador

Compatibilidad con varios lectores y escritores para FileSystemSyncAccessHandle y escritor exclusivo para FileSystemWritableFileStream.

Varios lectores y escritores para FileSystemSyncAccessHandle

El sistema de archivos privado de origen (también conocido como sistema de archivos del bucket) permite a los desarrolladores acceder a archivos optimizados para obtener el máximo rendimiento de lectura y escritura. Esto se hace a través de objetos FileSystemSyncAccessHandle. Actualmente, intentar abrir varios objetos FileSystemSyncAccessHandle para la misma entrada de archivo falla con un NoModificationAllowedError. Dado que hay casos de uso en los que esta restricción es limitante, Chrome 121 presenta un nuevo parámetro mode para el método FileSystemFileHandle.createSyncAccessHandle() con los siguientes valores de cadena permitidos:

  • "readwrite": Este es el valor predeterminado actual. Una vez abierto, se permiten todos los métodos de FileSystemSyncAccessHandle. Solo se permite una instancia de FileSystemSyncAccessHandle.
  • "read-only" : Permite varios lectores. Una vez abierto, solo se permiten métodos de lectura en FileSystemSyncAccessHandle: read(), getSize() y close(). Se pueden crear varias instancias de FileSystemSyncAccessHandle, siempre que todas estén en modo de solo lectura.
  • "readwrite-unsafe": Permite varios escritores. Una vez abierto, se permiten todos los métodos de FileSystemSyncAccessHandle. Se pueden crear varias instancias de FileSystemSyncAccessHandle, siempre que todas estén en modo no seguro de lectura y escritura.

El comportamiento actual se conserva manteniendo la opción "readwrite" como la predeterminada, que solo permite una instancia a la vez. Si un sitio necesita abrir varios objetos FileSystemSyncAccessHandle, pero no necesita realizar operaciones de escritura, se debe usar la opción "read-only". Por último, la última opción "readwrite-unsafe" permite varias instancias, así como operaciones de lectura y escritura. En este caso, las operaciones de escritura pueden ser inestables si se realizan desde varias pestañas, y los sitios deben proporcionar su propio esquema de bloqueo.

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

Escritor exclusivo para FileSystemWritableFileStream

A diferencia de FileSystemSyncAccessHandle, hoy se pueden crear varias instancias de FileSystemWritableFileStream por entrada de archivo. Lo que falta es una forma de proporcionar una opción para un escritor exclusivo. Chrome 121 agrega un parámetro mode opcional al método FileSystemAccessFileHandle.createWritable() que tiene los siguientes valores:

  • Modo "exclusive": Solo puede existir un escritor a la vez.
  • Modo "siloed": Este es el valor predeterminado actual. Cada escritor creado tendrá su propio archivo de intercambio.
const writable1 = await handle.createWritable({mode: 'exclusive'});
// This will fail:
const writable2 = await handle.createWritable();

Navegadores compatibles

Ambas funciones, múltiples lectores y escritores para FileSystemSyncAccessHandle y escritor exclusivo para FileSystemWritableFileStream, son compatibles a partir de Chrome 121.

Ingresa a la prueba para desarrolladores

Para ingresar a la prueba para desarrolladores y probar la función antes del lanzamiento de Chrome 121, establece la marca #file-system-access-locking-scheme en chrome://flags como Habilitada. Esto te permitirá probar la función de forma local en tu máquina.

Agradecimientos

Daseul Lee, Nathan Memmott y Rachel Andrew revisaron este artículo.