| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/es/docs/Web/API/File_System_API | [Back] [Original] |
Get to know MDN better
Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.
Contexto seguro: Esta funcin est disponible solo en contextos seguros (HTTPS), en algunos o todos los navegadores que lo soportan.
Nota: Esta caracterstica est disponible en Web Workers.
La API de Sistema de Archivos, con extensiones proporcionadas a travs de la File System Acces API para acceder a los archivos del sistema de archivos del dispositivo, permite funciones de lectura, escritura y gestin de archivos.
Ver Relationship to other file-related APIs para una comparacin entre esta API, la File and Directory Entries API y la File API.
Esta API permite interactuar con archivos en el dispositivo local de un usuario o en un sistema de archivos en red accesible para el usuario. Las funciones principales de esta API incluyen leer archivos, escribir o guardar archivos y acceder a la estructura de directorios.
La mayor parte de la interaccin con archivos y directorios se realiza a travs de manejadores. Una clase padre FileSystemHandle ayuda a definir dos clases hijas: FileSystemFileHandle y FileSystemDirectoryHandle, para archivos y directorios respectivamente.
Los manejadores representan un archivo o directorio en el sistema del usuario. Primero, puede acceder a ellos mostrando al usuario un selector de archivos o directorios mediante mtodos como window.showOpenFilePicker() y window.showDirectoryPicker(). Una vez que se invocan, aparece el selector de archivos y el usuario selecciona un archivo o un directorio. Una vez que esto se ha realizado de forma exitosa, se devuelve un manejador.
Tambin puede acceder a los manejadores de archivos a travs de:
DataTransferItem.getAsFileSystemHandle() de la HTML Drag and Drop API.Cada manejador proporciona su propia funcionalidad, y existen algunas diferencias dependiendo del que se solicite (vase la seccin interfaces para obtener detalles especficos). A continuacin, se puede acceder a los datos del archivo o a la informacin (incluidos los hijos) del directorio seleccionado. Esta API abre nuevas posibilidades funcionales que hasta ahora no existan en la web. No obstante, la seguridad ha sido una prioridad a la hora de disear la API, y el acceso a los datos de archivos y directorios no est permitido a menos que el usuario lo autorice expresamente (tenga en cuenta que este no es el caso del sistema de archivos de origen privado, ya que no es visible para el usuario.)
Nota: Las diferentes excepciones que pueden producirse al utilizar las funciones de esta API se enumeran en las pginas pertinentes, tal y como se define en la especificacin. Sin embargo, la situacin se complica debido a la interaccin entre la API y el sistema operativo subyacente. Se ha propuesto incluir en la especificacin una lista de correspondencias de errores, que incluye informacin til relacionada.
Nota:
Los objetos basados en FileSystemHandle se pueden serializar en una instancia de base de datos IndexedDB, o transferirse mediante postMessage().
El sistema de archivos de origen privado (OPFS por sus siglas en ingls) es un punto final de almacenamiento proporcionado como parte de la API de Sistema de Archivos, que es privado para el origen de la pgina y no es visible para el usuario como el sistema de archivos clsico. Proporciona acceso a un tipo especial de archivo que est altamente optimizado para el rendimiento y ofrece acceso de escritura in situ a su contenido.
A continuacin se presentan algunos posibles casos de uso:
Aplicaciones con cargador persistente
Videojuegos u otras aplicaciones con gran cantidad de recursos multimedia.
Editor de audio o de fotos con acceso sin conexin a internet o cach local (ideal para mejorar el rendimiento y la velocidad).
Reproductor de vdeo sin conexin a internet
Cliente de correo web sin conexin a internet
Lea nuestro Origin private file system Para obtener instrucciones sobre como utilizarlo.
FileSystemWritableFileStream. Una vez que los datos que desea guardar estn en formato Blob, objeto String, literal de cadena o buffer, puede abrir un flujo y guardar los datos en un archivo. Este puede ser un archivo existente o uno nuevo.FileSystemSyncAccessHandle sncrono, los cambios se escriben en un archivo utilizando el mtodo write(). De manera opcional, tambin se puede llamar a flush() si se necesita que los cambios se guarden en el disco en un momento especfico (de lo contrario, se puede dejar que el sistema operativo subyacente se encargue de ello cuando lo considere oportuno, lo que debera funcionar correctamente en la mayora de los casos).FileSystemChangeRecord Contiene detalles de un nico cambio observado por un FileSystemObserver.
FileSystemHandleUn objeto que representa una entrada de archivo o directorio. Varios manejadores pueden representar la misma entrada. En la mayora de los casos, no se trabaja directamente con FileSystemHandle, sino con sus interfaces hijas FileSystemFileHandle y FileSystemDirectoryHandle.
FileSystemFileHandlePoporciona un manejador para una entrada del sistema de archivos.
FileSystemDirectoryHandlePoporciona un manejador para un directorio del sistema de archivos.
FileSystemObserver Proporciona un mecanismo para observar los cambios en los archivos o directorios seleccionados.
FileSystemSyncAccessHandleProporciona un manejador sncrono para una entrada del sistema de archivos, que opera in situ en un nico archivo del disco. La naturaleza sncrona de las lecturas y escrituras de archivos permite un mayor rendimiento para mtodos crticos en contextos en los que las operaciones asncronas conllevan una gran sobrecarga, por ejemplo, WebAssembly. Solo se puede acceder a esta clase dentro de Web Workers dedicados para archivos dentro del Sistema de archivos de origen pivado.
FileSystemWritableFileStreamUn objeto WritableStream con mtodos adicionales tiles, que opera sobre un nico archivo en el disco.
Window.showDirectoryPicker()Muestra un selector de directorios que permite al usuario seleccionar un directorio.
Window.showOpenFilePicker()Muestra un selector de archivos que permite al usuario seleccionar uno o varios archivos.
Window.showSaveFilePicker()Muestra un selector de archivos que permite al usuario guardar un archivo.
DataTransferItem.getAsFileSystemHandle()Devuelve una Promise que se resuelve con un FileSystemFileHandle si el elemento arrastrado es un archivo, o con un FileSystemDirectoryHandle si el elemento arrastrado es un directorio.
StorageManager.getDirectory()Se utiliza para obtener una referencia a un objeto FileSystemDirectoryHandle que permite acceder a un directorio y a su contenido, almacenado en el origin private file system. Devuelve una Promise que se resuelve con un objeto FileSystemDirectoryHandle.
El siguiente cdigo permite al usuario elegir un archivo desde el selector de archivos.
async function getFile() {
// Abre el selector de archivos y desestructura el resultado del primer manejador
const [fileHandle] = await window.showOpenFilePicker();
const file = await fileHandle.getFile();
return file;
}
La siguiente funcin asncrona presenta un selector de archivos y, una vez elegido el archivo, utiliza el mtodo getFile() para recuperar el contenido.
const pickerOpts = {
types: [
{
description: "Images",
accept: {
"image/*": [".png", ".gif", ".jpeg", ".jpg"],
},
},
],
excludeAcceptAllOption: true,
multiple: false,
};
async function getTheFile() {
// Abre el selector de archivos y desestructura el resultado del primer manejador.
const [fileHandle] = await window.showOpenFilePicker(pickerOpts);
// Obtener el contenido del archivo
const fileData = await fileHandle.getFile();
}
El siguiente ejemplo devuelve un manejador de directorio con el nombre especificado. Si el directorio no existe, este ser creado.
const dirName = "directoryToGetName";
// Suponiendo que tenemos un manejador de directorios: 'currentDirHandle'
const subDir = currentDirHandle.getDirectoryHandle(dirName, { create: true });
La siguiente funcin asncrona utiliza resolve() para encontrar la ruta de un archivo seleccionado, en relacin con un manejador de directorios especificado.
async function returnPathDirectories(directoryHandle) {
// Obten un manejador de archivos mostrando un selector de archivos.
const [handle] = await self.showOpenFilePicker();
if (!handle) {
// El usuario cancel o no pudo abrir un archivo.
return;
}
// Comprueba si el manejador existe dentro de nuestro manejador de directorios.
const relativePaths = await directoryHandle.resolve(handle);
if (relativePaths === null) {
// No existe dentro del manejador de directorios.
} else {
// relativePaths es un arreglo de nombres que proporciona la ruta relativa.
for (const name of relativePaths) {
// Registrar cada entrada
console.log(name);
}
}
}
La siguiente funcin asncrona abre el selector de archivos guardados, que devuelve un FileSystemFileHandle una vez seleccionado un archivo. A continuacin, se crea un flujo que puede ser escrito, utilizando el mtodo FileSystemFileHandle.createWritable().
Despus, se escribe un Blob definido por el usuario en el flujo, que posteriormente se cierra.
async function saveFile() {
// Crear un nuevo manejador
const newHandle = await window.showSaveFilePicker();
// Crear un FileSystemWritableFileStream para escribir en l
const writableStream = await newHandle.createWritable();
// Escribe nuestro archivo
await writableStream.write(imgBlob);
// Cierra el archivo y escribe el contenido en el disco.
await writableStream.close();
}
A continuacin se muestran diferentes ejemplos de opciones que se pueden pasar al mtodo write().
// Solo pasa los datos (sin opciones)
writableStream.write(data);
// Escribe los datos en el flujo desde la posicin determinada.
writableStream.write({ type: "write", position, data });
// Actualiza el desplazamiento del cursor del archivo a la posicin especificada.
writableStream.write({ type: "seek", position });
// Cambia el tamao del archivo para que su longitud est basada en un determinado nmero de bytes.
writableStream.write({ type: "truncate", size });
Este ejemplo lee y escribe de forma sncrona un archivo en el Sistema de archivos de origen privado.
La siguiente funcin, que maneja eventos asncronos, est contenida dentro de un Web Worker. Al recibir un mensaje del hilo principal, realiza lo siguiente:
ArrayBuffer para contenerlo.onmessage = async (e) => {
// Recuperar el mensaje enviado al trabajo desde el script principal.
const message = e.data;
// Obtener manejador para el archivo boceto (borrador) en OPFS.
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
// Obtener manejador de acceso sync (sncrono).
const accessHandle = await draftHandle.createSyncAccessHandle();
// Obtener el tamao del archivo.
const fileSize = accessHandle.getSize();
// Leer el contenido del archivo en un bfer.
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
// Escribe el mensaje al final del archivo.
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
// Persistir los cambios en el disco.
accessHandle.flush();
// Cerrar siempre FileSystemSyncAccesHandle cuando haya terminado.
accessHandle.close();
};
Nota:
En versiones anteriores de la especificacion, close(), flush(), getSize(), y truncate() se especificaron de forma poco ergonmica como mtodos asncronos. Esto ya ha sido modificado, pero algunos navegadores aun admiten las versiones asncronas.
| Specification |
|---|
| File System |
| File System Access |
This page was last modified on 30 sept 2025 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |