hace 2 años
En el desarrollo web moderno, la capacidad de subir archivos de forma sencilla e intuitiva es crucial. Imagina permitir a tus usuarios simplemente arrastrar archivos desde su explorador directamente a tu página web, olvidándose de los engorrosos selectores de archivos tradicionales. Esto es posible gracias a librerías como Dropzone.js, una herramienta Javascript de código abierto que facilita enormemente la implementación de zonas de carga de archivos mediante la técnica de arrastrar y soltar.

¿Qué es Dropzone.js?
Dropzone.js es una librería ligera y potente que convierte cualquier elemento DOM de tu página web en una zona de recepción de archivos. Su principal ventaja radica en la simplicidad de uso y la mejora significativa en la experiencia del usuario al subir archivos. En lugar de navegar por el sistema de archivos, los usuarios pueden simplemente arrastrar los ficheros deseados y soltarlos en el área designada. Dropzone.js se encarga del resto, gestionando la carga de archivos al servidor mediante peticiones Ajax de forma transparente.
Es importante destacar que Dropzone.js es una librería que opera del lado del cliente. Esto significa que se encarga de la gestión de los archivos en el navegador del usuario, pero no implementa la lógica de procesamiento y almacenamiento de los archivos en el servidor. Para ello, necesitarás implementar código en el lado del servidor utilizando el lenguaje de programación que prefieras (Python, PHP, Node.js, etc.).
Cómo Empezar a Usar Dropzone.js
Integrar Dropzone.js en tu proyecto es sorprendentemente sencillo. Aquí te mostramos las principales formas de activarlo y configurarlo:
Activación Automática con la Clase 'dropzone'
La forma más rápida de empezar a utilizar Dropzone.js es simplemente añadir la clase dropzone a un elemento <form> en tu HTML. Dropzone.js buscará automáticamente todos los elementos <form> que contengan esta clase y se adjuntará a ellos, transformándolos en zonas de arrastrar y soltar. Los archivos que se arrastren a esta zona se enviarán automáticamente a la URL especificada en el atributo action del formulario.
Ejemplo de HTML:
<form action="/upload" class="dropzone"></form>Con este simple código, ya tienes una zona de arrastre y soltar funcional en tu página web.
Instanciación Manual para Elementos No-Formulario
Si deseas utilizar Dropzone.js en elementos que no sean formularios, como un <div> específico, puedes instanciar la clase Dropzone manualmente en Javascript. Existen dos formas principales de hacerlo:
Javascript Puro
Puedes crear una instancia de Dropzone utilizando Javascript puro, proporcionando el selector del elemento DOM y las opciones de configuración, incluyendo la URL de subida:
var myDropzone = new Dropzone( "div#mi-dropzone", { url: "/file/upload/" });jQuery
Si utilizas jQuery en tu proyecto, también puedes instanciar Dropzone.js de la siguiente manera:
$("div#mi-dropzone").dropzone({ url: "/file/upload/" });En este caso, es obligatorio especificar la opción url, ya que Dropzone.js no puede determinar la URL de subida automáticamente al no estar asociado a un formulario con atributo action.
Configuración Avanzada de Dropzone.js
Dropzone.js ofrece una amplia gama de opciones de configuración para personalizar su comportamiento y adaptarlo a tus necesidades específicas. Estas opciones pueden definirse de dos maneras:
Configuración Global para Elementos con Clase 'dropzone'
Si estás utilizando la activación automática mediante la clase dropzone, puedes definir configuraciones globales para todos los elementos que utilicen esta clase. Esto se hace a través del objeto Dropzone.options. Por ejemplo, para establecer el nombre del parámetro del archivo y el tamaño máximo de archivo, puedes usar:
Dropzone.options.myDropzone = { paramName: "archivo", // El nombre del parámetro que se enviará al servidor (por defecto es 'file') maxFilesize: 2, // Tamaño máximo de archivo en MB };En este ejemplo, myDropzone es un nombre arbitrario que puedes usar para referirte a esta configuración específica. Puedes tener diferentes configuraciones para diferentes zonas de Dropzone.
Configuración Individual al Instanciar Dropzone
Cuando instancias Dropzone.js manualmente, puedes pasar las opciones de configuración directamente como un objeto en el segundo argumento del constructor o la función .dropzone() de jQuery, como se mostró en los ejemplos anteriores.
Desactivando el Descubrimiento Automático
Por defecto, Dropzone.js busca automáticamente elementos con la clase dropzone al cargar la página. Si deseas desactivar este comportamiento y tener un control total sobre la instanciación, puedes hacerlo de dos maneras:
- Desactivar el descubrimiento automático para un elemento específico:
Dropzone.options.myDropzone = false; // Evita el descubrimiento automático para elementos con configuración 'myDropzone'Dropzone.autoDiscover = false; // Desactiva el descubrimiento automático en toda la páginaOpciones de Configuración Esenciales
Dropzone.js ofrece una amplia gama de opciones, pero algunas de las más útiles y comunes son:
| Opción | Descripción |
|---|---|
url | Obligatoria en elementos no-formulario o formularios sin atributo action. Define la URL del servidor a la que se enviarán los archivos. |
parallelUploads | Número de archivos que se subirán simultáneamente. Los archivos se procesan en cola, pero esta opción permite subir varios a la vez. |
uploadMultiple | Si se establece en true, permite enviar múltiples archivos en una única petición al servidor. |
maxFilesize | Define el tamaño máximo permitido para cada archivo en MB. Si se excede, se mostrará un mensaje de error. |
paramName | Nombre del parámetro que se utilizará para enviar el archivo al servidor en la petición POST. Por defecto es 'file'. |
createImageThumbnails | Si se establece en true, Dropzone.js generará miniaturas de las imágenes subidas y las mostrará en la interfaz. |
maxFiles | Define el número máximo de archivos que se pueden subir en total. |
acceptedFiles | Permite especificar los tipos de archivo MIME aceptados. Funciona de forma similar al atributo accept del elemento <input type="file">. |
autoProcessQueue | Por defecto es true, lo que significa que los archivos se suben automáticamente al arrastrarlos. Si se establece en false, la subida se debe iniciar manualmente llamando a myDropzone.processQueue(). |
addRemoveLinks | Si se establece en true, se añadirán enlaces para eliminar la vista previa de los archivos subidos. |
Personalización Adicional: Mensajes y Datos Extra
Ocultar el Mensaje Predeterminado
Si no deseas mostrar el mensaje predeterminado de Dropzone.js (»Arrastra archivos aquí para subirlos (o haz clic)«), puedes añadir un elemento dentro de tu zona Dropzone con la clase dz-message. Dropzone.js detectará este elemento y no creará el mensaje por defecto.

Ejemplo:
<div id="mi-dropzone" class="dropzone"> <div class="dz-message"><span>Arrastra tus archivos aquí</span></div> </div>Enviar Datos Adicionales con la Subida
Dropzone.js permite enviar datos adicionales junto con los archivos subidos de varias maneras:
- Campos Ocultos en el Formulario: Dropzone.js enviará automáticamente cualquier campo oculto (
<input type="hidden">) que se encuentre dentro del formulario Dropzone. - Opción
params: Puedes utilizar la opciónparamsen la configuración de Dropzone.js para enviar datos adicionales estáticos con cada subida. - Evento
sending: Para enviar datos específicos para cada archivo, puedes utilizar el eventosending. Este evento se dispara antes de que se envíe cada archivo, y te permite modificar los datos que se enviarán.
Ejemplo de uso del evento sending para enviar el tamaño del archivo:
myDropzone.on("sending", function(file, xhr, formData) { // Envía el tamaño del archivo como dato POST adicional formData.append("filesize", file.size); });Acceder a la Vista Previa y Datos del Archivo
Dropzone.js añade información útil al objeto file que se utiliza en los eventos. Puedes acceder a propiedades como file.width y file.height si el archivo es una imagen, así como a file.upload, que contiene información sobre el progreso de la subida (progress, total, bytesSent).
También puedes acceder al HTML de la vista previa de un archivo a través de file.previewElement. Por ejemplo, para añadir un evento de clic a la vista previa para eliminar el archivo:
myDropzone.on("addedfile", function(file) { file.previewElement.addEventListener("click", function() { myDropzone.removeFile(file); }); });Uso Avanzado: Dropzone en Todo el Cuerpo de la Página
Es posible convertir todo el <body> de la página en una zona Dropzone. En este caso, es recomendable definir un contenedor específico para las vistas previas de los archivos utilizando la opción previewsContainer. También es posible que no desees que todo el cuerpo de la página sea clickable para seleccionar archivos, por lo que puedes desactivar la opción clickable.
new Dropzone(document.body, { previewsContainer: ".dropzone-previews", // Contenedor para las vistas previas clickable: false // Desactiva la opción de clic para seleccionar archivos });Preguntas Frecuentes (FAQ)
- ¿Dropzone.js es compatible con todos los navegadores?
Dropzone.js es compatible con la mayoría de los navegadores modernos. Se recomienda consultar la documentación oficial para obtener la lista completa de navegadores compatibles y posibles polyfills para navegadores más antiguos.
- ¿Cómo manejo los errores de subida en el servidor?
Dropzone.js se encarga de la subida de archivos al cliente, pero el manejo de errores del lado del servidor debe implementarse en tu código de servidor. Puedes configurar el servidor para que devuelva códigos de estado HTTP específicos en caso de error y manejar estos códigos en el evento
errorde Dropzone.js. - ¿Puedo personalizar la apariencia de Dropzone.js?
Sí, Dropzone.js es altamente personalizable a través de CSS. Puedes modificar la apariencia de la zona de arrastre, las vistas previas de los archivos, los mensajes, etc., utilizando las clases CSS proporcionadas por Dropzone.js o añadiendo tus propias clases.
- ¿Cómo puedo subir archivos a diferentes carpetas en el servidor?
Puedes controlar la carpeta de destino en el servidor modificando la URL a la que se envían los archivos (opción
url). También puedes enviar datos adicionales con cada subida (como se explicó anteriormente) para indicar al servidor en qué carpeta debe guardar el archivo. - ¿Dropzone.js soporta la subida de carpetas completas?
Por defecto, Dropzone.js no soporta la subida de carpetas completas. Sin embargo, existen extensiones y soluciones alternativas que puedes investigar si necesitas esta funcionalidad específica.
Conclusión
Dropzone.js es una librería imprescindible para cualquier desarrollador web que busque implementar una experiencia de subida de archivos intuitiva y moderna. Su facilidad de uso, su amplia gama de opciones de configuración y su capacidad de personalización la convierten en una herramienta poderosa para mejorar la interacción de los usuarios con tu sitio web. Desde la simple activación con la clase dropzone hasta las configuraciones más avanzadas y la manipulación de eventos, Dropzone.js te ofrece las herramientas necesarias para crear zonas de carga de archivos eficientes y atractivas.
