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, el intento de abrir varios objetos FileSystemSyncAccessHandle para la misma entrada de archivo falla con una 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 que se abra, se permitirá cualquier método en FileSystemSyncAccessHandle. Se pueden crear varias instancias de FileSystemSyncAccessHandle, siempre y cuando todas estén en modo de lectura y escritura no seguro.

El comportamiento actual se conserva manteniendo la opción "readwrite" como 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. En Chrome 121, se 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.