[typescript] 타입스크립트로 Nest.js 파일 업로드 구현하기
Nest.js는 TypeScript로 구축된 서버 측 애플리케이션의 효율적인 구축을 돕는 프레임워크입니다. 이 튜토리얼에서는 Nest.js와 함께 타입스크립트를 사용하여 파일 업로드를 구현하는 방법에 대해 설명하겠습니다.
환경 설정
먼저 Nest.js 프로젝트를 생성하고, 파일 업로드를 지원하기 위해 multer
라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 필수 패키지를 설치합니다.
npm install @nestjs/platform-express multer
파일 업로드 서비스 생성
다음으로 파일 업로드 서비스를 생성합니다. 아래의 코드는 파일을 업로드하고 저장하기 위한 간단한 서비스 예제입니다.
import { Injectable, UploadedFile } from '@nestjs/common';
import { diskStorage } from 'multer';
import { extname } from 'path';
@Injectable()
export class FileUploadService {
async uploadFile(file: Express.Multer.File): Promise<string> {
return new Promise((resolve, reject) => {
const storage = diskStorage({
destination: './uploads',
filename: (req, file, callback) => {
const randomName = Array(32)
.fill(null)
.map(() => Math.round(Math.random() * 16).toString(16))
.join('');
return callback(null, `${randomName}${extname(file.originalname)}`);
},
});
const upload = multer({ storage }).single('file');
upload(null, null, async (err) => {
if (err) {
return reject(err);
}
resolve(file.filename);
});
});
}
}
위 코드에서 multer
를 사용하여 파일이 업로드되면 해당 파일에 대한 정보를 반환하는 uploadFile
메서드를 정의했습니다.
컨트롤러에서 파일 업로드 사용
마지막으로 이 서비스를 컨트롤러에서 호출하여 파일 업로드를 처리할 수 있습니다. 아래의 코드는 해당 내용을 보여주는 간단한 예제입니다.
import { Controller, Post, UseInterceptors, UploadedFile } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { FileUploadService } from './file-upload.service';
@Controller('file')
export class FileUploadController {
constructor(private readonly fileUploadService: FileUploadService) {}
@Post('upload')
@UseInterceptors(FileInterceptor('file'))
async uploadFile(@UploadedFile() file: Express.Multer.File) {
return this.fileUploadService.uploadFile(file);
}
}
위 코드에서는 FileInterceptor
및 UploadedFile
decorator를 사용하여 파일을 업로드하는 엔드포인트를 정의했습니다.
이제 파일 업로드 서비스 및 컨트롤러를 만들고 Nest.js와 타입스크립트를 사용하여 파일 업로드를 구현할 수 있습니다.
이상으로 타입스크립트를 사용하여 Nest.js에 파일 업로드를 구현하는 방법에 대한 튜토리얼을 마치겠습니다. 부족한 점이 있으시면 언제든 도움을 청할 수 있습니다.
참고 자료
- Nest.js 공식 문서: https://nestjs.com/
- Multer 공식 문서: https://www.npmjs.com/package/multer