Multer para JavaScript (Node.js): guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Multer para JavaScript (Node.js): guia completo com exemplos práticos

1. O que é e para que serve

Multer é uma biblioteca middleware popular para Node.js, projetada para processar dados no formato multipart/form-data — o formato usado no envio de arquivos através de formulários HTML. Diferente do módulo padrão body-parser, que só trabalha com JSON e dados codificados em URL, o Multer consegue interpretar requisições compostas, extrair arquivos e salvá-los no servidor (em memória ou no disco). A biblioteca é construída sobre o módulo busboy e oferece uma API prática para configurar diretórios, nomes de arquivos, filtros de tipo e limites de tamanho.

Para que serve o Multer? Em qualquer aplicação web onde o usuário precise enviar um avatar, documento, imagem ou vídeo, é necessário processar multipart/form-data. O Express.js (o framework mais popular para Node.js) não tem suporte nativo a esse formato, tornando o Multer uma ferramenta essencial. Ele permite que o desenvolvedor foque na lógica de negócio, sem se preocupar com a análise de baixo nível de dados binários.

O Multer suporta o upload de um ou vários arquivos simultaneamente, trabalha com campos de formulário, geração personalizada de nomes de arquivos, filtragem por tipos MIME e extensões, além de limitar o tamanho dos dados enviados. Graças à sua configuração flexível, a biblioteca é adequada tanto para projetos simples (como upload de avatares) quanto para sistemas complexos com armazenamento em nuvem (através de armazenamentos personalizados).

2. Instalação

A instalação é feita via npm (Node Package Manager). Certifique-se de ter o Node.js instalado (versão 12 ou superior).

npm install multer

Após a instalação, a biblioteca estará disponível para importação no seu projeto.

3. Início rápido — exemplo funcional mínimo

Vamos criar um servidor simples com Express.js que recebe o upload de um arquivo via formulário e o salva na pasta uploads/.

Passo 1. Estrutura do projeto

mkdir multer-example
cd multer-example
npm init -y
npm install express multer
touch index.html
touch server.js

Passo 2. Formulário HTML (index.html)

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <title>Upload de Arquivo</title>
</head>
<body>
    <h1>Envie seu arquivo</h1>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="myFile" required>
        <button type="submit">Enviar</button>
    </form>
</body>
</html>

Passo 3. Servidor (server.js)

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

const app = express();
const PORT = 3000;

// Configuração do Multer: arquivos serão salvos na pasta 'uploads/'
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'uploads/');
    },
    filename: (req, file, cb) => {
        // Gera um nome único: data atual + extensão original
        const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
        cb(null, uniqueSuffix + path.extname(file.originalname));
    }
});

const upload = multer({ storage: storage });

// Servir o HTML estático
app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

// Processar o upload do arquivo
app.post('/upload', upload.single('myFile'), (req, res) => {
    if (!req.file) {
        return res.status(400).send('Nenhum arquivo enviado.');
    }
    res.send(`Arquivo "${req.file.originalname}" enviado com sucesso. Tamanho: ${req.file.size} bytes.`);
});

app.listen(PORT, () => {
    console.log(`Servidor rodando em http://localhost:${PORT}`);
});

Recommendations