javascript

JavaScript: convertir archivo a base64

En el post de hoy veremos cómo convertir un archivo (seleccionado en un input de tipo file) a su representación en base64 como cadena usando JavaScript.

Técnicamente hablando, vamos a convertir un File a un string en base64 usando FileReader.

Aunque base64 ocupa más tamaño que el archivo original, en ocasiones es necesario convertir un fichero binario a este formato para su fácil transporte o almacenamiento.

Nota: en este ejemplo aprenderás a convertir un archivo seleccionado en un input, pero puedes hacer lo mismo con un archivo recuperado del OPFS o incluso un archivo descargado con fetch; las posibilidades son infinitas.

Input

Primero veamos el input de tipo file en donde el usuario va a seleccionar el archivo a convertir a base64. Está así:

<input type="file" id="fileInput">

Vamos a obtener una referencia al mismo y escuchar el evento change. Cuando ese evento se dispare, convertiremos el fichero a cadena en base 64.

Función para convertir a base64

Veamos la función de JavaScript que recibe el archivo de tipo File y devuelve una promesa que, al resolverse, tendrá la representación del archivo en base 64.

Para esto vamos a usar un FileReader e invocar al método readAsDataUrl, de modo que en el evento onload del reader podremos acceder a la cadena base64 en reader.result.

const fileToBase64 = async function (file) {
    return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onload = async () => {
            resolve(reader.result);
        };
        reader.onerror = error => {
            reject(error);
        }
        reader.readAsDataURL(file);
    });
}

Toma en cuenta que esta función devolverá una promesa que puedes esperar con await o con .then, en mi caso lo haré con await como verás a continuación.

Convertir archivo

Ahora que tenemos ambas cosas solo nos falta juntarlas.

Veamos a continuación el código JavaScript para convertir cualquier tipo de archivo seleccionado por el usuario a una cadena en base64 e imprimirla en la consola.

En este caso la cadena está siendo impresa, pero puedes almacenarla en una base de datos, enviarla a un servidor o hacer cualquier otra cosa. El código queda así:

$fileInput.addEventListener("change", async () => {
    const files = $fileInput.files;
    if (files.length <= 0) {
        return;
    }
    const firstFile = files[0];
    const encodedAsBase64 = await fileToBase64(firstFile);
    console.log(encodedAsBase64);
});

Ahora cuando el usuario elija un archivo, su representación en base 64 será mostrada en la consola. Todo esto usando JavaScript del lado del cliente.

Código completo

Ya te mostré el código más importante, pero puedes revisar el código completo en GitHub así como una demostración en línea. Si abres la demostración, no olvides de abrir la consola de depuración.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • Hola buenas noches, me podría orientar como hacer un archivo ejecutable, creado en python que contiene una imagen incluida en la carpeta de trabajo por favor soy. Nuevo en esto muchas gracias

    • Por supuesto, estaré encantado de ayudarle más a fondo. Ofrezco servicios de consultoría personalizados para resolver problemas específicos. Si está interesado, envíeme un mensaje a https://parzibyte.me/#contacto y podemos conversar sobre cómo puedo ayudarle.

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.