Mejoras de API para trabajar con archivos en el navegador

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

Varios lectores y escritores para FileSystemSyncAccessHandle

El sistema de archivos privados de origen (a veces denominado sistema de archivos del bucket) permite a los desarrolladores acceder a los archivos optimizados para obtener el máximo rendimiento de lectura y escritura. Esto sucede mediante los 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 limita, Chrome 121 introduce 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 permite cualquier método en 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 permite cualquier método en 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 si mantienes 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 subidas de tono si se realizan desde varias pestañas, y los sitios deberán 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 de FileSystemWritableFileStream

A diferencia de lo que sucede con FileSystemSyncAccessHandle, actualmente se pueden crear varias instancias de FileSystemWritableFileStream por entrada de archivo. Lo que falta es una forma de ofrecer 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 modo 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

A partir de Chrome 121, se admiten ambas funciones, varios lectores y escritores para FileSystemSyncAccessHandle y un escritor exclusivo para FileSystemWritableFileStream.

Ingresar a la prueba para desarrolladores

Para ingresar a la prueba para desarrolladores a fin de 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.