Carregando Arquivos com Multer - Node.js
Uma das tarefas mais comuns em Node.js é carregar arquivos no servidor. Embora Node.js não possua ferramentas nativas para isso, podemos utilizar pacotes adicionais especializados. Um dos pacotes populares para essa finalidade é o Multer, que funciona sobre o Express.
Vamos criar um novo projeto para carregar arquivos. Instalamos os pacotes:
npm install express multer
Em seguida, defina um novo arquivo chamado index.html
<!DOCTYPE html>
<html>
<head>
<title>Node.js</title>
<meta charset="utf-8" />
</head>
<body>
<h1>Upload de Arquivo</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<label>Arquivo</label><br>
<input type="file" name="filedata" /><br><br>
<input type="submit" value="Enviar" />
</form>
</body>
<html>
É importante observar que, para que o Multer no servidor consiga processar o arquivo carregado, o atributo enctype
multipart/form-data
No arquivo principal da aplicação app.js
const express = require("express");
const multer = require("multer");
const app = express();
app.use(express.static(__dirname));
app.use(multer({dest:"uploads"}).single("filedata"));
app.post("/upload", function (req, res, next) {
let filedata = req.file;
console.log(filedata);
if(!filedata)
res.send("Erro ao carregar o arquivo");
else
res.send("Arquivo carregado com sucesso");
});
app.listen(3000, () => console.log("Servidor iniciado na porta 3000"));
Nesse exemplo, o Multer é adicionado como um middleware. Na função multer
dest
uploads
multer({dest:"uploads"}).single("filedata")
Se essa pasta não existir no projeto, ela será criada automaticamente.
A função single()
index.html
filedata
single()
Após configurar o Multer, podemos acessar o arquivo carregado através de req.file
Para testar a aplicação, inicie-o, acesse a página index.html

Depois disso, no console, veremos algo como:
{ fieldname: 'filedata', originalname: 'ebook.pdf', encoding: '7bit', mimetype: 'application/pdf', destination: 'uploads', filename: '9bd3bdfd59e5e4b4c8527a1ee6f665da', path: 'uploads\\9bd3bdfd59e5e4b4c8527a1ee6f665da', size: 740735 }
Aqui, podemos ver os metadados que o servidor recebe ao carregar o arquivo, os quais podemos utilizar conforme necessário.
Como resultado, a pasta uploads será criada no projeto, onde encontraremos o arquivo carregado:
. ├── app.js ├── index.html ├── uploads │ └── 9bd3bdfd59e5e4b4c8527a1ee6f665da └── node_modules
Vale destacar, que não é obrigatório configurar o Multer globalmente como um middleware para todas as solicitações. Podemos definir o uso do Multer apenas para funções específicas de tratamento de solicitações. Por exemplo:
const express = require("express");
const multer = require("multer");
const app = express();
const upload = multer({dest:"uploads"});
app.use(express.static(__dirname));
app.post("/upload", upload.single("filedata"), function (req, res, next) {
let filedata = req.file;
console.log(filedata);
if(!filedata)
res.send("Erro ao carregar o arquivo");
else
res.send("Arquivo carregado com sucesso");
});
app.listen(3000, () => console.log("Servidor iniciado na porta 3000"));
Neste exemplo, o Multer é configurado em uma variável chamada upload
/upload
Dessa forma, o Multer será aplicado apenas a essa rota, e não a todas as solicitações.