[NestJS] AWS S3에 파일 업로드 @aws-sdk/client-s3
2024. 7. 15. 14:13ㆍNestJs
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
반응형
'NestJs' 카테고리의 다른 글
[NestJS] Unknown column in where clause 에러 발생 (0) | 2024.07.25 |
---|---|
[NestJS] Faker 연동 (0) | 2024.07.23 |
Restful한 API 설계 규칙 (0) | 2024.07.12 |
[NestJS] multer를 사용하여 File upload하기 (0) | 2024.07.11 |
NestJS에서 Swagger CLI Plugins 사용하여 API 문서화하기 (0) | 2024.07.10 |