[NestJS] AWS S3에 파일 업로드 @aws-sdk/client-s3

2024. 7. 15. 14:13NestJs

728x90
반응형

서론

NestJS 프레임워크를 활용하여 AWS S3에 파일을 업로드하는 기능을 구현하는 방법에 대해 설명드리겠습니다. AWS S3는 클라우드 기반의 객체 스토리지 서비스로, NestJS와 함께 사용할 때 효과적으로 파일 업로드를 처리할 수 있습니다. 여기서는 두 가지 주요한 AWS SDK 라이브러리인 aws-sdk와 @aws-sdk/client-s3에 대해 설명드리겠습니다.

 

 

NestJS에서 AWS S3를 사용하기 위해 일반적으로 aws-sdk 라이브러리를 설치하고 사용합니다. 그러나 최근 AWS는 aws-sdk의 v2 버전을 서비스 종료하고, 새로운 개발을 @aws-sdk/client-s3와 같은 v3 버전으로 이관하도록 권장하고 있습니다. 이에 따라 aws-sdk v2를 계속 사용하면 경고 메시지가 나타날 수 있습니다.

 

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

@Injectable()
export class FileService {
  
  ...

	async uploadSingleFile(file: Express.Multer.File): Promise<UploadFile> {
    if (!file) throw new BadRequestException('File is not Exist');

    const awsRegion = this.config.get('aws.region');
    const bucketName = this.config.get('aws.s3.bucketName');
    const client = new S3Client({
      region: awsRegion,
      credentials: {
        accessKeyId: this.config.get('aws.accessKey'),
        secretAccessKey: this.config.get('aws.secretKey'),
      },
    });
    const key = `${Date.now().toString()}-${file.originalname}`;
    const params = {
      Key: key,
      Body: file.buffer,
      Bucket: bucketName,
      ACL: ObjectCannedACL.public_read,
    };
    const command = new PutObjectCommand(params);

    const uploadFileS3 = await client.send(command);
    if (uploadFileS3.$metadata.httpStatusCode !== 200)
      throw new BadRequestException('Failed upload File');
	
    ...
    
  }
}

 

 

 

  • ConfigService 사용: @nestjs/config 패키지를 사용하여 환경 변수에서 AWS 관련 설정을 가져옵니다. 이를 통해 AWS 자격 증명 정보를 관리하고, S3 버킷 이름 및 파일 업로드 시 사용할 리전을 설정합니다.
  • S3Client 및 PutObjectCommand :@aws-sdk/client-s3에서 제공하는 S3Client를 생성하고, PutObjectCommand를 사용하여 파일을 S3 버킷에 업로드합니다.

 

 

 

728x90
반응형