Das BrowserConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet Plus han podido tratar con archivos y directorios por mucho tiempo. los Datei-API
proporciona funciones para representar objetos de archivo en aplicaciones web, así como para seleccionarlos a través de ProgrammierungConcepto de Programación¿Qué es la Programación?La Programación es el procedimiento al que se recurre para crear algún tipo de aplicación o software, para materializar un concepto o proyecto que requiere de la utilización de un lenguaje informático para poder llevarse a cabo. Es algo que está absolutamente ligado a la figura del programador, y que cada vez está cobrando más relevancia dentro del mundo del marketing.Decimos que tanto esta figura Plus y ingresar a sus datos. A pesar de todo, en el momento en que miras más de cerca, todo lo que brilla no es oro.

Die traditionelle Art, mit Dateien umzugehen

Dateien öffnen

Als Entwickler können Sie Dateien über das Internet öffnen und lesen

Element. In seiner einfachsten Form ähnelt das Öffnen einer Datei möglicherweise dem folgenden Codebeispiel. das Eingang Das Objekt gibt Ihnen eine Dateiliste, die im folgenden Fall nur aus einem besteht
Datei. EIN Datei ist eine bestimmte Art von Klecks, y se puede utilizar en cualquier contexto que un Blob pueda.

const openFile = asynchron () => {
Rückkehr new Promise((resolve) => {
const Eingang = Dokument.createElement('input');
Eingang.Art = 'Datei';
Eingang.addEventListener('change', () => {
resolve(Eingang.Dateien[0]);
});
Eingang.klicken¿Qué es un click?Es la acción de pulsar un botón del ratón una vez colocado el puntero del mismo sobre un elemento determinado de la pantalla. El click determina la interacción del usuario con el sistema.Otras denominaciones: Clic Plus();
});
};

Verzeichnisse öffnen

Um Ordner (oder Verzeichnisse) zu öffnen, können Sie die konfigurieren

AttributAtributo es una definición que se usa en varios campos de IT. Generalmente, un atributo se usa para describir un fichero o un campo de datos con más detalle. En la programación orientada a objetos, los atributos son una propiedad o característica que se puede asignar a un objeto (elemento). A través el uso de atributos se pueden asignar valores específicos a ciertos items. Áreas de aplicación Las tres áreas Plus. Aparte de eso, todo lo demás funciona igual que arriba. Pese a su nombre con prefijo de proveedor,
Webkit-Verzeichnis no solo se puede usar en los navegadores Chromium y WebKit, sino además en el Edge heredado basado en EdgeHTML y en Firefox.

Speichern (statt: Herunterladen) von Dateien

Para almacenar un archivo, tradicionalmente, está limitado a wird heruntergeladen eine Datei, die dank der funktioniert
<a download>

atributo. Dado un Blob, puede determinar el ancla href Attribut zu a Klecks: UrlEl URL (Localizador Uniforme de Recursos), es una dirección definida que apunta a la posición de un archivo en un servidor y lo recupera. Las URL se introducen en un navegador web para ingresar a documentos en la web o se incrustan como hipervínculos dentro de un documento. Se puede usar un Permalink para que una URL esté disponible de forma permanente. Componentes de una URL • prefijo de protocolo Plus que puede conseguir del
URL.createObjectURL ()

Methode.

Vorsicht:
Para evitar pérdidas de memoria, siempre revoque la URL luego de la descarga.

const saveFile = asynchron (Klecks) => {
const zu = Dokument.createElement('a');
zu.herunterladen = 'my-file.txt';
zu.href = Url.createObjectURL(Klecks);
zu.addEventListener('click', (und) => {
setTimeout(() => Url.revokeObjectURL(zu.href), 30 * 1000);
});
zu.klicken();
};

Das Problem

Ein massiver Nachteil herunterladen enfoque es que no hay forma de hacer que suceda un flujo clásico de abrir → editar → guardar, dicho de otra forma, no hay forma de Überschreiben die Originaldatei. Stattdessen erhalten Sie eine neue Kopieren bei jedem "Speichern" aus der Originaldatei im Standard-Download-Ordner des Betriebssystems.

Die APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene Plus del sistema de archivos nativo

La API del sistema de archivos nativo hace que ambas operaciones, abrir y guardar, sean mucho más sencillas. Además posibilita echte Einsparungen, dicho de otra forma, no solo puede optar dónde guardar un archivo, sino además sobrescribir un archivo existente.

Dateien öffnen

Mit dem Native Dateisystem-APIDas Öffnen einer Datei ist eine Frage eines Aufrufs an die window.showOpenFilePicker () método. Esta llamada devuelve un identificador de archivo, del cual puede conseguir el Datei a través de el eine Datei bekommen () Methode.

const openFile = asynchron () => {
try {
const [handle] = erwarten Fenster. showOpenFilePicker();
Rückkehr handle.getFile();
} catch (err) {
console.Error(err.Süßkartoffel, err.Botschaft);
}
};

Verzeichnisse öffnen

Öffnen Sie ein Verzeichnis, indem Sie anrufen
window.showDirectoryPicker () que hace que los directorios se puedan elegir en el cuadro de diálogo del archivo.

Dateien speichern

Guardar archivos es igualmente sencillo. Desde un identificador de archivo, crea una secuencia de escritura mediante createWritable (), después escribe los datos de Blob llamando al flujo schreiben () método, y en conclusión cierra la secuencia llamando a su schließen () Methode.

const saveFile = asynchron (Klecks) => {
try {
const handle = erwarten Fenster.showSaveFilePicker({
Typen: [{
akzeptieren: {
},
}],
});
const schreibbar = erwarten handle.createWritable();
erwarten schreibbar.write(Klecks);
erwarten schreibbar.close();
Rückkehr handle;
} catch (err) {
console.Error(err.Süßkartoffel, err.Botschaft);
}
};

Einführung in browser-nativefs

Tan estupendamente bien como la API del sistema de archivos nativo, es todavía no ampliamente disponible.

caniuse-5305250

Tabla de compatibilidad del BrowserUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los Plus para la API del sistema de archivos nativo. (Quelle)

Es es por esto que que veo la API del sistema de archivos nativo como una fortschreitende VerbesserungLa mejora progresiva es una estrategia de diseño web diseñada para permitir que el contenido básico de una web se muestre independientemente de la tecnología del navegador, la conexión a Internet o el tipo de dispositivo final. A la vez, no obstante, la web en cuestión además debería ofrecer una versión completa diseñada para satisfacer los mejores requerimientos técnicos posibles. Un resultado de esta estrategia es un diseño responsive. Una Plus. Como tal, quiero usarlo cuando el navegador lo admita, y utilizar el enfoque tradicional si no; todo ello sin castigar nunca al usuario con descargas innecesarias de código JavaScriptJavaScript es un lenguaje de programación que funciona en el lado del cliente y con el que las webs pueden ser más funcionales. Incorporación en código HTML El código JavaScript puede ser incrustado en las páginas HTML, para que adquieran funcionalidad. Existen varias opciones. Puede estar entre las etiquetas <SCRIPT> y </SCRIPT>, puede estar contenido en un archivo externo, puede ser un parámetro de las etiquetas HTML, y puede estar Plus no compatible. los browser-nativefs
Library es mi respuesta a este reto.

Grundsätze für die Gestaltung

Ya que es probable que la API del sistema de archivos nativo cambie en el futuro, la API del browser-nativefs no se basa en ella. Dicho de otra forma, la biblioteca no es un Polyfüllung, sondern ein Ponyfüllung. Puede (estática o dinámicamente) importar exclusivamente cualquier funcionalidad que necesite para mantener su aplicación lo más pequeña viable. Los métodos disponibles son los apropiadamente nombrados
Datei öffnen (),
directoryOpen ()y
fileSave (). Internamente, la función de biblioteca detecta si la API del sistema de archivos nativo es compatible y después importa la ruta del código respectivo.

Utilizando la biblioteca browser-nativefs

Los tres métodos son intuitivos de utilizar. Puede especificar la aceptación de su aplicación mimeTypes oder Datei Erweiterungenund etablieren a mehrere marca para permitir o no permitir la selección de varios archivos o directorios. Para conseguir detalles completos, consulte el
browser-nativefs API-Dokumentation. Das folgende Codebeispiel zeigt, wie Sie Bilddateien öffnen und speichern können.


importieren {
fileOpen,
directoryOpen,
fileSave,
} desde 'httpsHTTPS (protocolo de Transferencia de Hiper-Texto) es un protocolo que permite determinar una conexión segura entre el servidor y el cliente, que no puede ser interceptada por personas no autorizadas. En resumidas cuentas, es la versión segura de el http (Hyper Text Transfer Protocol) Cómo funciona Una conexión HTTP estándar en Internet puede ser fácilmente secuestrada por partes no autorizadas. El propósito de una conexión HTTPS es evitar esto: encriptar Plus://unpkg.com/browser-nativefs';

(asynchron () => {
const Klecks = erwarten fileOpen({
mimeTypes: ['image/*'],
});


const blobs = erwarten fileOpen({
mimeTypes: ['image/*'],
mehrere: wahr,
});


const blobsInDirectory = erwarten directoryOpen({
recursive: wahr
});


erwarten fileSave(Klecks, {
fileName: 'Untitled.png',
});
})();

Manifestation

Sie können den obigen Code in Aktion in a sehen Manifestation in Glitch. Ihr Quellcode además se encuentra disponible allí. Ya que, por razones de seguridad, los subtramas de origen cruzado no pueden mostrar un selector de archivos, la demostración no se puede incrustar en este PostConcepto de Post¿Qué es un Post?Un Post es todo aquel contenido, sea post, opinión, noticia u otro género, que un autor publica en un blog. Este puede ser de carácter corporativo o meramente ocioso; pero siempre tiene como meta arrojar información o reflejar una idea, al mismo tiempo de facilitar que los usuarios encuentren la web donde se recoge por medio de de buscadores y demás plataformas online.Generalmente, se han Plus.

Die browser-nativefs-Bibliothek in der Natur

In meiner Freizeit trage ich ein wenig zu einer installierbaren PWA bei Excalidraw, una herramienta de pizarra que le posibilita esbozar diagramas fácilmente con una sensación de dibujado a mano. Es completamente sensible y va bastante bien en una gama de dispositivos, desde pequeños teléfonos móviles hasta computadoras con pantallas grandes. Esto significa que debe manejar archivos en todas las diversas plataformas, ya sea que admitan o no la API del sistema de archivos nativo. Esto lo convierte en un gran candidato para la biblioteca browser-nativefs.

Puedo, a modo de ejemplo, iniciar un dibujo en mi iPhone, guardarlo (técnicamente: descargarlo, dado que Safari no es compatible con la API del sistema de archivos nativo) en la carpeta Descargas de mi iPhone, abrir el archivo en mi escritorio (luego de transferirlo desde mi phone), modificar el archivo y sobrescribirlo con mis cambios, o inclusive guardarlo como un archivo nuevo.

iphone-original-5647631

Starten Sie eine Excalidraw-Zeichnung auf einem iPhone, auf dem die native Dateisystem-API nicht unterstützt wird, auf der jedoch eine Datei im Ordner "Downloads" gespeichert (heruntergeladen) werden kann.

chrom-modifizieren-4721146

Abrir y modificar el dibujo de Excalidraw en el escritorio donde se admite la API del sistema de archivos nativo y, de este modo, se puede ingresar al archivo mediante la API.

Chrom-Oversave-2788546

Überschreiben der Originaldatei mit Änderungen an der ursprünglichen Excalidraw-Zeichnungsdatei. Der Browser zeigt einen Dialog an, in dem ich gefragt werde, ob es in Ordnung ist.

Chrom-speichern-als-8162641

Speichern Sie die Änderungen in einer neuen Excalidraw-Datei. Die Originaldatei bleibt erhalten.

Beispiel für einen Code aus dem wirklichen Leben

A continuación, puede ver un ejemplo real de browser-nativefs tal como se utiliza en Excalidraw. Este extracto está tomado de
/src/data/json.ts. Von besonderem Interesse ist wie saveAsJSON () ein Dateihandle übergeben oder Null zu browser-nativefs '
fileSave () Dies führt dazu, dass es überschrieben wird, wenn ein Handle zugewiesen wird, oder in einer neuen Datei gespeichert wird, wenn dies nicht der Fall ist.

Export const saveAsJSON = asynchron (
Elemente: readonly ExcalidrawElement[],
appState: AppState,
fileHandle: any,

) => {
const serialized = serializeAsJSON(Elemente, appState);
const Klecks = new Klecks([serialized], {
Art: "application/json",
});
const Süßkartoffel = `${appState.Süßkartoffel}.excalidraw`;
(Fenster As any).handle = erwarten fileSave(
Klecks,
{
fileName: Süßkartoffel,
Beschreibung: "Excalidraw file",
Erweiterungen: ["excalidraw"],
},
fileHandle || Null,
);
};

Export const loadFromJSON = asynchron () => {
const Klecks = erwarten fileOpen({
Beschreibung: "Excalidraw files",
Erweiterungen: ["json", "excalidraw"],
mimeTypes: ["application/json"],
});
Rückkehr loadFromBlob(Klecks);
};

Consideraciones sobre la Benutzeroberfläche  Una interfaz de usuario es un medio por medio de del cual una persona puede controlar un software o hardware específico. Lo ideal es que las interfaces de usuario sean fáciles de utilizar para que la interacción sea lo más instintiva e intuitiva factible. En el caso de los programas informáticos, esto se denomina interfaz gráfica de usuario. Desarrollo y tipos de interfaces de usuario A diferencia de la Plus

Ob in Excalidraw oder in Ihrer Anwendung, die Benutzeroberfläche muss an die Browser-Support-Situation angepasst werden. Wenn die native Dateisystem-API (if ('showOpenFilePicker' im Fenster) {}) Sie können eine zeigen Speichern als botón al mismo tiempo de un speichern Taste. Die folgenden Screenshots zeigen den Unterschied zwischen der reaktionsschnellen Haupt-App-Symbolleiste von Excalidraw auf dem iPhone und dem Chrome-Desktop. Beachten Sie, wie auf dem iPhone die Speichern als Die Schaltfläche fehlt.

save-1154063

Excalidraw App-Symbolleiste auf dem iPhone mit nur einer speichern Taste.

Speichern-Speichern-als-7805564

Excalidraw-Anwendungssymbolleiste in Chrome mit speichern und ein fokussierter Speichern als Taste.

Schlussfolgerungen

Das Arbeiten mit nativen Dateien funktioniert technisch in allen modernen Browsern. In Browsern, die die native Dateisystem-API unterstützen, können Sie die Benutzererfahrung verbessern, indem Sie das Speichern und Überschreiben (nicht nur das Herunterladen) von Dateien ermöglichen und Ihren Benutzern ermöglichen, neue Dateien zu erstellen, wo immer sie möchten, während sie in Browsern, die dies tun, funktionsfähig bleiben. Die native Dateisystem-API wird nicht unterstützt. das browser-nativefs le facilita la vida al lidiar con las sutilezas de la mejora progresiva y hacer que su código sea lo más simple viable.

Vielen Dank

Este post fue revisado por Joe Medley y
Kayce Basques. Dank an Excalidraw-Mitarbeiter
für Ihre Arbeit am Projekt und für die Überprüfung meiner Pull-Anfragen.
Heldenbild zum
Ilya Pavlov auf Unsplash.