작성완료

NestJS 파일 업로드
NestJS에서 파일 업로드를 위한 컨트롤러 구현 방법을 설명하며, multer 타입 설치, 파일 저장 로직, 파일명 관리 및 보안 검증 필요성을 강조한다. 업로드된 파일은 원래 이름으로 저장되지만, 실무에서는 중복되지 않는 이름으로 저장해야 한다.
타입 설치 (TypeScript만 해당)
yarn add -D @types/multer
Controller
/src/file/file.controller.ts
import { Controller, Post, UseInterceptors , UploadedFile } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { FileService } from './file.service.ts';
import * as fs from 'fs';
@Controller('/api/file')
export class FileController {
constructor(private readonly service: FileService) {}
@Post('/')
@UseInterceptors(FileInterceptor('FILE'))
fileUpload(@UploadedFile() file: Express.Multer.File) {
const { buffer, originalname } = file;
const path = __dirname + '/../../upload/' + originalname;
try {
fs.writeFileSync(path, buffer);
return { result: true, message: '파일이 업로드되었습니다.' }
} catch {
return { result: false, message: '파일 업로드에 실패하였습니다.' }
}
}
}
설명
- 필요에 따라 업로드 로직을 file.service.ts에 만들어도 된다.
- 저장하는 파일명은 코드에서는 originalname을 그대로 사용했으나 실무에서는 랜덤 문자열이나 타임스탬프와 같이 중복되지 않는 이름으로 저장해야 한다.
- 모든 파일을 전부 업로드 할 시 보안에 취약하기 때문에 확장자 또는 파일 유형에 따라 파일 유효성 검사가 필요하다.