Guide complet de Dropzone.js

Objectif
- Comprendre ce qu’est Dropzone.js et pourquoi l’utiliser
- Apprendre l’installation, l’utilisation de base et la personnalisation étape par étape
- Fournir des exemples de code concrets et des astuces pratiques


1. Qu’est‑ce que Dropzone.js ?



Dropzone.js est une bibliothèque JavaScript open‑source qui simplifie la mise en place du téléchargement de fichiers HTML5.
- Glisser‑déposer : il suffit de faire glisser un fichier pour lancer le téléchargement.
- Aperçu : les images affichent automatiquement un aperçu miniature.
- Fichiers multiples : plusieurs fichiers peuvent être envoyés en une seule fois.
- Intégration serveur : les fichiers sont envoyés via Ajax et la réponse est traitée côté client.

Pourquoi choisir Dropzone.js ?
- Expérience utilisateur : interface intuitive pour le téléchargement.
- Facilité de développement : pas besoin d’implémenter la logique de téléchargement à partir de zéro.
- Extensibilité : options et événements couvrent la plupart des besoins.

Capture d’écran de la page Dropzone


2. Installation

2.1 Utiliser un CDN

La façon la plus simple est d’utiliser un CDN. Ajoutez le code suivant dans votre index.html.

<link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" />
<script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>

Astuce : la dernière version est disponible sur unpkg.

2.2 NPM / Yarn

Si votre projet utilise npm, installez‑le avec la commande suivante.

npm install dropzone
# ou
yarn add dropzone

Après l’installation, importez‑le dans votre code.

import Dropzone from 'dropzone';

Attention : assurez‑vous de définir Dropzone.autoDiscover = false; pour empêcher l’initialisation automatique.


3. Utilisation de base



3.1 HTML

<form action="/upload" class="dropzone" id="myDropzone"></form>
  • L’attribut action indique l’URL vers laquelle les fichiers seront envoyés.
  • class="dropzone" permet à Dropzone de reconnaître le formulaire automatiquement.

3.2 JavaScript

Dropzone.autoDiscover = false; // empêcher l’initialisation automatique

const myDropzone = new Dropzone('#myDropzone', {
  paramName: 'file',          // nom du paramètre attendu par le serveur
  maxFilesize: 5,             // taille maximale en Mo
  acceptedFiles: 'image/*',   // types de fichiers autorisés
  dictDefaultMessage: 'Glissez‑déposez un fichier ici ou cliquez pour le sélectionner',
  init: function () {
    this.on('success', function (file, response) {
      console.log('Téléchargement réussi :', response);
    });
    this.on('error', function (file, errorMessage) {
      console.error('Échec du téléchargement :', errorMessage);
    });
  }
});

Options clés
- url : URL de destination (peut remplacer action).
- maxFiles : nombre maximum de fichiers à télécharger en une fois.
- uploadMultiple : activer le téléchargement multiple.
- autoProcessQueue : envoyer automatiquement les fichiers (ou appeler processQueue() manuellement).


4. Personnalisation

4.1 Modifier le style de l’aperçu

Dropzone affiche par défaut une miniature pour les images. Vous pouvez ajuster le style avec du CSS.

/* Ajuster la taille de la miniature */
.dropzone .dz-image img {
  width: 100px;
  height: 100px;
  object-fit: cover;
}

/* Style du nom de fichier */
.dropzone .dz-details .dz-filename {
  font-weight: bold;
}

4.2 Communication avec le serveur

Le serveur doit accepter le fichier et renvoyer une réponse JSON. Exemple avec Node.js + Express :

const express = require('express');
const multer  = require('multer');
const upload = multer({ dest: 'uploads/' });

const app = express();

app.post('/upload', upload.single('file'), (req, res) => {
  // Les informations du fichier sont dans req.file
  res.json({ success: true, filename: req.file.filename });
});

app.listen(3000, () => console.log('Server running on http://localhost:3000'));

Astuce : le nom du paramètre ('file') doit correspondre à paramName défini dans Dropzone.

4.3 Supprimer un fichier

Dropzone peut envoyer une requête DELETE pour supprimer un fichier.

const myDropzone = new Dropzone('#myDropzone', {
  // ...
  dictRemoveFile: 'Supprimer',
  init: function () {
    this.on('removedfile', function (file) {
      // Envoi d’une requête DELETE au serveur
      fetch('/delete', {
        method: 'DELETE',
        body: JSON.stringify({ filename: file.upload.filename }),
        headers: { 'Content-Type': 'application/json' }
      });
    });
  }
});

5. Astuces pratiques

Situation Solution
Limiter le nombre de fichiers Utiliser l’option maxFiles: 10
Afficher la progression Écouter l’événement progress
Annuler un téléchargement Appeler la méthode cancelUpload()
Réessayer après un échec Implémenter une logique de réessai dans l’événement error ou utiliser l’option retry
Sécurité Inclure un jeton CSRF dans l’option headers

6. Conclusion

Dropzone.js offre une interface de téléchargement puissante avec une configuration minimale.
- Installation : CDN ou npm → autoDiscover = false → formulaire HTML + instance JavaScript
- Personnalisation : options, événements et CSS pour adapter l’UI à vos besoins
- Intégration serveur : combinez‑le avec des middlewares comme multer pour stocker les fichiers et renvoyer des réponses JSON

Explorez davantage le téléchargement multiple et la personnalisation de l’aperçu pour améliorer l’expérience utilisateur.

Ressources supplémentaires
- Documentation officielle
- Dépôt d’exemples

Bon codage ! 🚀