Instalando o Multer
Documentação https://www.npmjs.com/package/multer
- yarn add multer
- npm install –save multer
Modificações realizadas
- Crie este diretório public\upload\users aí são pastas uma dentro da outra aonde ficará armazenado os arquivos upados, na raiz do projeto
- Criar dentro do arquivo do controller a configuração do multer no meu caso o nome do path é src\controller\EventsController.ts
- Fazer a rota no postman
- Abaixo tem explicando como tudo ficou, confira e adapte ao seu projeto:
A estrutura ficou assim com a pasta public criada:

O controller em controller\EventsController.ts ficou assim:

Explicação sobre este controller segundo o Chat GPT:
A explicação não pode ser muito resumida porquê realmente você precisa entender o que acontece aí então vai ter que ler se quiser realmente entender:
Esse trecho de código é um controlador de uma aplicação que lida com o upload de imagens para um evento. Vou explicar passo a passo o que acontece no código:
Um objeto storage é criado utilizando o multer.disckStorage() . Esse objeto configura o destino e o nome dos arquivos que serão armazenados no servidor.
- A função destination define o diretório para onde os arquivos serão salvos.
- A função filename determina o nome do arquivo que será salvo. No caso, ele é composto pelo timestamp atual e o nome do arquivo original sem espaços.
Um middleware upload é criado usando o multer(). Ele utiliza o objeto storage definido anteriormente e adiciona uma função fileFilter para filtrar os tipos de arquivo permitidos (apenas imagens PNG, JPG e JPEG) e o tamanho do arquivo está limitado a 200kbps em limits.
O controlador uploadImageEvent é definido, que lida com o processo de upload da imagem do evento.
- O ID do evento é obtido a partir dos parâmetros da requisição.
- O middleware upload.single(‘image’) é chamado para processar o upload do arquivo. Se houver um erro, uma resposta de erro é enviada.
- Se não houver erro e um arquivo for enviado, o nome do arquivo é extraído.
- O controlador tenta encontrar o evento no banco de dados com base no ID fornecido.
- Se o evento não existir, uma resposta de erro é enviada.
- Caso contrário, o banco de dados é atualizado com o nome do arquivo da imagem.
- Uma resposta de sucesso é retornada, incluindo a mensagem “Upload successful” e o caminho do arquivo no servidor.
Se algum erro ocorrer durante o processo, uma resposta de erro genérica é enviada com status 500.
Resumindo, este controlador lida com o upload de imagens de eventos. Ele configura como as imagens são armazenadas, filtra os tipos de arquivo permitidos, processa o upload, atualiza o banco de dados com o nome da imagem e retorna mensagens de sucesso ou erro conforme necessário.
A minha rota no postman ficou assim:

Observação sobre a rota de Upload de imagem no Postman:
- No header desta rota você deve configurar o Content-Type como multipart/form-data;
- No Body a key image este nome é o mesmo nome que foi colocado no controller, veja a explicação do controller que você vai entender, e o tipo tem que ser tipo file para você poder fazer o upload, bem sobre o postman é isso.