import { Controller, Get, Param, Post, Response, UploadedFile, UseGuards, UseInterceptors, } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; import { ApiBearerAuth, ApiBody, ApiConsumes, ApiParam, ApiTags, } from '@nestjs/swagger'; import { AuthGuard } from '@nestjs/passport'; import { FilesLocalService } from './files.service'; @ApiTags('Files') @Controller({ path: 'files', version: '1', }) export class FilesLocalController { constructor(private readonly filesService: FilesLocalService) {} @ApiBearerAuth() @UseGuards(AuthGuard('jwt')) @Post('upload') @ApiConsumes('multipart/form-data') @ApiBody({ schema: { type: 'object', properties: { file: { type: 'string', format: 'binary', }, }, }, }) @UseInterceptors(FileInterceptor('file')) async uploadFile(@UploadedFile() file: Express.Multer.File) { return this.filesService.create(file); } @Get(':path') @ApiParam({ name: 'path', type: 'string', }) download(@Param('path') path, @Response() response) { return response.sendFile(path, { root: './files' }); } }