Multer pour JavaScript (Node.js) : guide complet avec exemples
1. Qu'est-ce que Multer et pourquoi l'utiliser ?
Multer est une bibliothèque middleware populaire pour Node.js, conçue pour traiter les données multipart/form-data — le format utilisé lors du téléchargement de fichiers via des formulaires HTML. Contrairement au module standard body-parser, qui ne fonctionne qu'avec les données JSON et URL-encodées, Multer sait analyser les requêtes composites, en extraire les fichiers et les enregistrer sur le serveur (en mémoire ou sur le disque). La bibliothèque est construite au-dessus du module busboy et offre une API pratique pour configurer les chemins, les noms de fichiers, le filtrage des types et la limitation de la taille.
Pourquoi utiliser Multer ? Dans toute application web où un utilisateur peut télécharger un avatar, un document, une image ou une vidéo, il est nécessaire de traiter le multipart/form-data. Express.js (le framework le plus populaire pour Node.js) ne prend pas en charge ce format nativement, ce qui fait de Multer un outil indispensable. Elle permet au développeur de se concentrer sur la logique métier plutôt que sur l'analyse de bas niveau des données binaires.
Multer prend en charge le téléchargement d'un ou plusieurs fichiers simultanément, la gestion des champs de formulaire, la génération personnalisée de noms de fichiers, le filtrage par types MIME et extensions, ainsi que la limitation de la taille des données téléchargées. Grâce à sa configuration flexible, la bibliothèque convient aussi bien aux projets simples (comme le téléchargement d'avatars) qu'aux systèmes complexes avec stockage cloud (via des stockages personnalisés).
2. Installation
L'installation se fait via npm (Node Package Manager). Assurez-vous d'avoir Node.js (version 12 ou supérieure) installé.
npm install multer
Après l'installation, la bibliothèque sera disponible pour l'importation dans votre projet.
3. Démarrage rapide — exemple minimal fonctionnel
Créons un serveur simple avec Express.js qui accepte le téléchargement d'un seul fichier via un formulaire et l'enregistre dans le dossier uploads/.
Étape 1. Structure du projet
mkdir multer-example
cd multer-example
npm init -y
npm install express multer
touch index.html
touch server.js
Étape 2. Formulaire HTML (index.html)
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Téléchargement de fichier</title>
</head>
<body>
<h1>Téléchargez votre fichier</h1>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="myFile" required>
<button type="submit">Envoyer</button>
</form>
</body>
</html>
Étape 3. Serveur (server.js)
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
const PORT = 3000;
// Configuration de Multer : les fichiers seront enregistrés dans le dossier 'uploads/'
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
// Génération d'un nom unique : date actuelle + extension d'origine
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
cb(null, uniqueSuffix + path.extname(file.originalname));
}
});
const upload = multer({ storage: storage });
// Distribution du fichier HTML statique
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
// Gestion du téléchargement de fichier
app.post('/upload', upload.single('myFile'), (req, res) => {
if (!req.file) {
return res.status(400).send('Aucun fichier téléchargé.');
}
res.send(`Le fichier "${req.file.originalname}" a été téléchargé avec succès. Taille : ${req.file.size} octets.`);
});
app.listen(PORT, () => {
console.log(`Serveur démarré sur le port ${PORT}`);
});
Aussi dans la bibliothèque
Surveillance Node.js : outils et bibliothèques pour l'observabilité
OpenCV C++ : guide complet avec exemples et tutoriel
Cryptographie en C# (.NET) : chiffrement et hachage de données
Mise en cache dans Node.js : Redis et alternatives pour accélérer les applications
Jetons JWT en TypeScript : guide complet pour travailler avec les JSON Web Tokens