Multer pour JavaScript (Node.js) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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}`);
});

Recommendations