Como fazer upload de arquivos em uma API Node.js?

O upload de arquivos em uma API Node.js pode ser feito com a biblioteca Multer, permitindo armazenar imagens, PDFs e outros formatos.

Como fazer upload de arquivos em uma API Node.js?

O upload de arquivos é um recurso comum em APIs para armazenar imagens, documentos e outros arquivos. No Node.js, utilizamos a biblioteca Multer para lidar com esse processo.

1. Instalando as dependências

Para gerenciar o upload de arquivos, instale o pacote multer:

npm install multer

2. Configurando o Multer

Crie um arquivo uploadConfig.js para configurar o destino dos arquivos enviados:

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

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'uploads/');
    },
    filename: (req, file, cb) => {
        cb(null, `${Date.now()}-${file.originalname}`);
    }
});

const upload = multer({ storage });

module.exports = upload;

3. Criando uma rota para upload de arquivos

Agora, podemos criar um endpoint para receber arquivos enviados pelo cliente:

const express = require('express');
const upload = require('./uploadConfig');

const app = express();

app.post('/upload', upload.single('arquivo'), (req, res) => {
    if (!req.file) {
        return res.status(400).json({ erro: 'Nenhum arquivo enviado' });
    }
    res.json({ mensagem: 'Upload realizado com sucesso', arquivo: req.file.filename });
});

app.listen(3000, () => console.log('Servidor rodando na porta 3000'));

4. Enviando arquivos para a API

Para testar o upload, use Postman ou Insomnia e envie uma requisição POST para http://localhost:3000/upload com um campo arquivo do tipo file.

A resposta será algo como:

{
    "mensagem": "Upload realizado com sucesso",
    "arquivo": "1678901234567-imagem.jpg"
}

5. Permitindo múltiplos arquivos

Se precisar enviar mais de um arquivo por vez, altere a rota:

app.post('/uploads', upload.array('arquivos', 5), (req, res) => {
    if (!req.files || req.files.length === 0) {
        return res.status(400).json({ erro: 'Nenhum arquivo enviado' });
    }
    res.json({ mensagem: 'Upload realizado', arquivos: req.files.map(file => file.filename) });
});

Agora, ao enviar vários arquivos no campo arquivos, a resposta conterá uma lista dos nomes dos arquivos armazenados.

Conclusão

O Multer facilita o upload de arquivos no Express.js, permitindo armazenar imagens, documentos e outros formatos de maneira eficiente. Podemos definir regras de tamanho, extensões permitidas e armazenar os arquivos em diferentes destinos.

O upload de arquivos é um recurso essencial para diversas aplicações, como redes sociais, e-commerces e plataformas de compartilhamento de documentos.

Serviços como Google Drive, Dropbox e Instagram dependem de sistemas de upload otimizados para armazenar e servir arquivos de forma escalável. APIs modernas utilizam ferramentas como Multer e AWS S3 para gerenciar arquivos com segurança e eficiência.

Algumas aplicações:

  • Armazenamento de imagens de perfil
  • Envio de documentos e contratos digitais
  • Upload de vídeos e áudios
  • Gerenciamento de arquivos em sistemas de nuvem
  • Integração com serviços de armazenamento como AWS S3

Dicas para quem está começando

  • Use multer.diskStorage() para definir o destino dos arquivos.
  • Limite o tamanho máximo dos arquivos para evitar sobrecarga.
  • Valide extensões de arquivos antes de armazená-los.
  • Teste uploads com Postman ou Insomnia antes da integração com frontend.
  • Para armazenar arquivos na nuvem, utilize serviços como AWS S3 ou Firebase Storage.

Contribuições de Henrique Almeida

Compartilhe este tutorial: Como fazer upload de arquivos em uma API Node.js?

Compartilhe este tutorial

Continue aprendendo:

Como conectar uma API Node.js a um banco de dados MySQL?

A conexão entre Node.js e MySQL pode ser feita utilizando o Sequelize, um ORM que facilita a manipulação de dados.

Tutorial anterior

Como criar um CRUD completo no Express.js?

Um CRUD no Express.js permite criar, ler, atualizar e deletar registros em um banco de dados de forma estruturada.

Próximo tutorial