728x90
반응형
Multer는 Node.js를 위한 미들웨어로, 다중 파트(Multipart) 데이터를 처리하는 데 사용됩니다. 특히 파일 업로드와 관련해 매우 유용하며, Nest.js에서도 쉽게 통합할 수 있습니다. 아래는 Multer에 대한 개념 정리와 Nest.js 프로젝트에 적용하는 방법에 대한 예시입니다.
Multer의 개념
Multer란?
- Multipart/form-data: HTML form 태그로 전송되는 파일 데이터를 처리하기 위한 포맷입니다. 일반적으로 파일 업로드에 사용됩니다.
- Multer: Express.js 기반의 미들웨어로, HTTP 요청에서 multipart/form-data 데이터를 처리하는 데 특화되어 있습니다.
Multer의 주요 기능
- 파일 저장 위치:
- 메모리(memoryStorage): 파일이 버퍼에 저장됩니다.
- 디스크(diskStorage): 서버의 디스크에 파일이 저장됩니다.
- 파일 필터링:
- 업로드할 파일의 유형(예: 이미지, 텍스트 파일 등)을 제한할 수 있습니다.
- 이름 지정:
- 업로드된 파일의 이름을 제어할 수 있습니다.
- 제한 설정:
- 업로드 파일 크기, 개수 등을 제한할 수 있습니다.
Multer를 Nest.js 프로젝트에 적용하기
1. Multer 설치
Nest.js에서 Multer를 사용하려면 관련 패키지를 설치해야 합니다:
npm install --save @nestjs/platform-express multer
2. Controller 구현
Multer를 사용하여 파일 업로드를 처리하는 컨트롤러를 작성합니다.
import { Controller, Post, UseInterceptors, UploadedFile } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
import { extname } from 'path';
@Controller('upload')
export class UploadController {
@Post()
@UseInterceptors(
FileInterceptor('file', {
storage: diskStorage({
destination: './uploads', // 파일 저장 경로
filename: (req, file, callback) => {
// 파일 이름 설정: 현재 시간 + 확장자
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9);
const ext = extname(file.originalname);
callback(null, `${uniqueSuffix}${ext}`);
},
}),
limits: {
fileSize: 5 * 1024 * 1024, // 최대 파일 크기: 5MB
},
fileFilter: (req, file, callback) => {
if (!file.mimetype.match(/\/(jpg|jpeg|png|gif)$/)) {
return callback(new Error('Only image files are allowed!'), false);
}
callback(null, true);
},
}),
)
uploadFile(@UploadedFile() file: Express.Multer.File) {
console.log('Uploaded file:', file);
return {
message: 'File uploaded successfully!',
file: file,
};
}
}
3. Module 설정
컨트롤러를 모듈에 등록합니다.
upload.module.ts
import { Module } from '@nestjs/common';
import { UploadController } from './upload.controller';
@Module({
controllers: [UploadController],
})
export class UploadModule {}
app.module.ts
UploadModule을 메인 모듈에 포함시킵니다.
import { Module } from '@nestjs/common';
import { UploadModule } from './upload/upload.module';
@Module({
imports: [UploadModule],
})
export class AppModule {}
4. 폴더 생성
업로드된 파일을 저장할 디렉토리를 생성합니다. 프로젝트 루트에 uploads 폴더를 만들어야 합니다:
/final-Project
├── src
│ ├── app.module.ts
│ ├── upload
│ ├── upload.controller.ts
│ ├── upload.module.ts
├── uploads <-- 업로드된 파일 저장 디렉토리
728x90
반응형
'틱톡 웹 만들기 풀스택 프로젝트' 카테고리의 다른 글
자동화를 위한 GitHub Actions CI/CD 워크플로우( Docker / AWS ECR / AWS ECS ) (0) | 2024.12.03 |
---|---|
3일차) 웹 영상편집 기능구현을 위한 FFmpeg 프레임워크 (0) | 2024.11.15 |
2일차) 프로젝트에 필요한 기술스텍과 라이브러리 정하기 (2) | 2024.11.15 |
1일차) 협업툴**노션**을 활용해서 프로젝트 계획하기 (2) | 2024.11.14 |