Antes de começar, certifique-se de ter o seguinte:
Primeiro, vamos criar um novo projeto NestJS. Abra o terminal e execute o seguinte comando:
npm i -g @nestjs/cli
nest new upload-images-tutorial
Isso criará um novo projeto chamado upload-images-tutorial
. Navegue para dentro do diretório do projeto:
cd upload-images-tutorial
Para gerenciar o upload de arquivos, usaremos a biblioteca multer
, que é um middleware para manipular multipart/form-data
, usado para upload de arquivos. Além disso, instalaremos @nestjs/platform-express
, que inclui a integração do Express com o NestJS.
npm install --save @nestjs/platform-express multer
Vamos configurar o Multer para gerenciar o upload de arquivos. Criaremos um arquivo de configuração para o Multer.
Crie um arquivo chamado multer.config.ts
no diretório src
:
// src/multer.config.ts
import { MulterOptions } from '@nestjs/platform-express/multer/interfaces/multer-options.interface';
import { diskStorage } from 'multer';
import { extname } from 'path';
export const multerConfig: MulterOptions = {
storage: diskStorage({
destination: './uploads',
filename: (req, file, cb) => {
const randomName = Array(32)
.fill(null)
.map(() => Math.round(Math.random() * 16).toString(16))
.join('');
return cb(null, `${randomName}${extname(file.originalname)}`);
},
}),
limits: {
fileSize: 1024 * 1024 * 5, // 5 MB
},
};
Agora, criaremos um controlador para gerenciar as requisições de upload de imagens.
// src/upload/upload.controller.ts
import { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { multerConfig } from '../multer.config';
@Controller('upload')
export class UploadController {
@Post()
@UseInterceptors(FileInterceptor('file', multerConfig))
uploadFile(@UploadedFile() file) {
return {
originalname: file.originalname,
filename: file.filename,
path: file.path,
};
}
}
Para organizar melhor nosso código, criaremos um módulo para gerenciar a funcionalidade de upload de imagens.
// src/upload/upload.module.ts
import { Module } from '@nestjs/common';
import { UploadController } from './upload.controller';
@Module({
controllers: [UploadController],
})
export class UploadModule {}
Precisamos garantir que nosso módulo de upload de imagens esteja importado no módulo principal da aplicação.
// src/app.module.ts
import { Module } from '@nestjs/common';
import { UploadModule } from './upload/upload.module';
@Module({
imports: [UploadModule],
})
export class AppModule {}
Crie uma pasta chamada uploads
no diretório raiz do seu projeto para armazenar os arquivos enviados.
mkdir uploads
Levante o servidor NestJS:
npm run start
Use ferramentas como Postman ou curl para testar o upload de imagens. Envie uma requisição POST para http://localhost:3000/upload
com um arquivo no campo file
.
Para poder acessar as imagens enviadas a partir do navegador, configuraremos o NestJS para servir arquivos estáticos.
// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.useStaticAssets(join(__dirname, '..', 'uploads'), {
prefix: '/uploads/',
});
await app.listen(3000);
}
bootstrap();
Cobrimos como configurar uma aplicação NestJS para fazer upload de imagens, incluindo a configuração do Multer, criação de controladores e módulos, e configuração do servidor para servir arquivos estáticos. Com esses passos, você deve ter uma compreensão sólida de como gerenciar o upload de arquivos em uma aplicação NestJS.
Jorge García
Fullstack developer