{}const=>[]async()letfn</>var
WebPráctica

Carga de archivo con barra de progreso

Aprende a implementar la carga de archivos con una barra de progreso en JavaScript. Una guía paso a paso con ejemplos para mejorar la interfaz de usuario.

К

Kodik

Autor

5 min de lectura

¡Hola! Hoy te ayudaré a crear un sistema sencillo y cómodo para cargar archivos con visualización del progreso en JavaScript. Esta funcionalidad es útil cuando el usuario necesita cargar archivos grandes y es importante ver cómo ha avanzado el proceso.

Analicemos este proceso paso a paso, con explicaciones detalladas de cada paso.

Paso 1. Crear un formulario HTML para cargar archivos

En primer lugar, necesitamos crear un formulario que permita al usuario seleccionar un archivo para descargar. En HTML, esto se hace usando el elemento <input> con el tipo file.

Plantilla HTML:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>File Upload with Progress</title>
</head>
<body>
  <h1>Загрузка файла с прогрессом</h1>
  <form id="uploadForm">
    <input type="file" id="fileInput" name="file" />
    <button type="submit">Загрузить файл</button>
  </form>

  <!-- Прогресс-бар -->
  <progress id="progressBar" value="0" max="100" style="width: 100%;"></progress>

  <!-- Результат -->
  <div id="status"></div>

  <script src="script.js"></script>
</body>
</html>

📋 Explicación:

  • El elemento <input type="file"> permite al usuario seleccionar un archivo para cargar.

  • La barra de progreso <progress> muestra el porcentaje de carga del archivo.

  • El elemento <div id="status"> se utilizará para mostrar mensajes sobre el estado de la carga (éxito o error).

Paso 2. Añadir un controlador de eventos de formulario

Cuando el usuario selecciona un archivo y hace clic en el botón "Cargar", debemos interceptar este evento y transferir el archivo al servidor. Para ello, añadiremos un controlador de formularios y cancelaremos su comportamiento estándar (recargar la página).

Agreguemos un controlador a script.js:

document.getElementById('uploadForm').addEventListener('submit', function (event) {
  event.preventDefault(); // Cancelar el comportamiento estándar del formulario
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];

  if (file) {
    uploadFile(file); // Pasamos el archivo a la función para cargarlo
  } else {
    alert('Please select a file.');
  }
});

🛑 ¿Qué está pasando aquí?:

  • Estamos escuchando el evento submit en el formulario.

  • Cancelamos el comportamiento estándar de envío de formularios.

  • Comprobamos si el usuario ha seleccionado un archivo y, en caso afirmativo, llamamos a la función para cargar el archivo uploadFile().

Paso 3. Configuración de la descarga de archivos usando XMLHttpRequest

Ahora pasemos a la parte principal: cargar un archivo en el servidor con seguimiento del progreso. Para ello, utilizaremos el objeto XMLHttpRequest, que nos permite enviar archivos y recibir información sobre el progreso de la carga.

Implementación de la función uploadFile:

function uploadFile(file) {
  const xhr = new XMLHttpRequest(); // Creamos un nuevo XMLHttpRequest
  const formData = new FormData(); // Usamos FormData para enviar un archivo

  formData.append('file', file); // Añadir un archivo a un objeto FormData

  // Controlador para el seguimiento del progreso de la carga
  xhr.upload.addEventListener('progress', function (event) {
    if (event.lengthComputable) {
      const percentComplete = (event.loaded / event.total) * 100;
      document.getElementById('progressBar').value = percentComplete; // Actualizando la barra de progreso
    }
  });

  // Controlador en caso de carga exitosa
  xhr.addEventListener('load', function () {
    if (xhr.status === 200) {
      document.getElementById('status').textContent = 'File uploaded successfully!';
    } else {
      document.getElementById('status').textContent = 'Error loading file.';
    }
  });

  // Controlador de errores
  xhr.addEventListener('error', function () {
    document.getElementById('status').textContent = 'An error occurred while uploading the file.';
  });

  xhr.open('POST', '/upload'); // Indicamos el método y la URL para enviar el archivo
  xhr.send(formData); // Enviando datos
}

📦 Análisis del trabajo:

  1. Creación XMLHttpRequest: Este objeto es responsable de enviar solicitudes HTTP.

  2. FormData: Usamos FormData para empaquetar los datos del archivo que se enviarán al servidor.

  3. Seguimiento del progreso: Usamos el evento progress para rastrear la cantidad de bytes cargados en el servidor y actualizar nuestra barra de progreso.

  4. Procesamiento de finalización de carga: Si la carga se realizó correctamente (estado 200), mostramos un mensaje sobre la carga exitosa, de lo contrario, mostramos un mensaje de error.

  5. Tratamiento de errores: Rastrear un error durante la carga y notificar al usuario en caso de fallo.

Paso 4. Configuración del servidor para procesar el archivo

Para completar nuestro proyecto, debemos configurar un servidor que acepte el archivo. Como ejemplo, puedes usar un servidor Node.js usando la biblioteca express y el paquete multer, que ayuda a procesar los archivos descargados.

Ejemplo de servidor Node.js:

const express = require('express');
const multer = require('multer');
const path = require('path');

const app = express();
const upload = multer({ dest: 'uploads/' }); // Indicamos la carpeta para cargar archivos

// Ruta para cargar el archivo
app.post('/upload', upload.single('file'), (req, res) => {
  if (!req.file) {
    return res.status(400).send('File was not uploaded.');
  }

  res.send('File uploaded successfully!');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

🌍 Explicación:

  • Utilizamos la biblioteca multer para procesar archivos cargados.

  • El servidor acepta el archivo, lo carga en la carpeta especificada (uploads/) y devuelve la respuesta al cliente.


Paso 5. Prueba

Ahora que hemos configurado tanto el lado del cliente como el del servidor, podemos probar la descarga de archivos. Inicia el servidor, abre la página con el formulario de descarga, selecciona el archivo y verás cómo se llena la barra de progreso a medida que se carga el archivo.


Conclusión

Cargar un archivo con una barra de progreso es una excelente manera de mejorar la experiencia del usuario, especialmente cuando se trabaja con archivos grandes. El usuario ve cómo avanza el proceso, lo que hace que su interacción con la aplicación sea más clara y transparente.

Si tienes alguna pregunta o quieres añadir funciones adicionales, como la compatibilidad con varios archivos o la visualización del tiempo restante, ¡haznos saber! 👨‍💻

🎯Deja de postergar

¿Te gustó el artículo?
¡Hora de practicar!

En Kodik no solo lees — escribes código de inmediato. Teoría + práctica = habilidades reales.

Práctica instantánea
🧠IA explica código
🏆Certificado

Sin registro • Sin tarjeta