NestJS AWS S3버킷에 저장되어있는 파일을 서버에 저장하기 - 3: S3 Bucket의 파일을 다운로드 하기
이제 S3버킷에 올린 파일을 받도록 하겠습니다.
이전글 : NestJS Server에 저장된 파일을 AWS S3버킷에 업로드 하기 - 2 : 클라이언트에서 받은 파일을 올리기
// /src/aws/aws.service.ts
// S3버킷에서 다운로드 받은 파일을 저장합니다.
downLoad(Key: string, saveName: string) {
// getObject에 인자로 넣을 params을 작성합니다.
const params = {
Bucket: process.env.S3_BUCKET,
Key, // 다운로드 받을 파일 이름
};
// s3를 이용하여 해당 params의 값을 확인후 callback함수의 data에 넣습니다
this.s3.getObject(params, async function (error, data) {
if (error != null) {
// 에러시 에러 출력(서버 멈춤)
throw new HttpException(error, HttpStatus.INTERNAL_SERVER_ERROR);
} else {
console.log('data : ', data);
//다운로드 한 파일을 downloads폴더에 저장한다.
fs.createWriteStream(pa + '/downloads/' + saveName).write(data.Body);
}
});
return true;
}
코드1) service부분
위 코드는 기존의 '/uploads'폴더가 아닌 '/downloads'폴더에 S3 Bucket으로 부터 받은 파일을 저장합니다. 파일의 버퍼를 받고 이것을 '/downloads'폴더에 생성합니다.
// /src/aws/aws.controller.ts
// 파일을 S3버킷에서 다운로드 받습니다
@Get('getFile/')
@ApiOperation({ summary: '파일을 S3 Bucket에서 서버쪽으로 download' })
async download(
// S3버킷에서 다운로드 할 파일 이름 입니다.
@Query('downloadName') downloadName: string,
// 서버에 저장할 파일 이름 입니다.
@Query('saveName') saveName: string,
) {
// 다운로드를 진행하고 결과값을 클라이언트에 보내줍니다.
return await this.awsService.downLoad(downloadName, saveName);
}
코드2) controller 부분
controller.ts에서 S3버킷에서 파일을 받을 API를 생성한다.
![]() |
사진1) downloads폴더 |
![]() |
사진2) Swagger 화면 |
![]() |
사진3) terminal 결과값 |
![]() |
사진4) 파일 다운로드 확인 |
이제 사진1 ~ 4까지 진행을 하면서 S3버킷에서 파일을 다운로드 할수 있습니다. 이는 클라이언트쪽으로 가는것이 아닌 NestJS서버에 저장되는 것입니다.
다음글 : NestJS 서버에 있는 파일을 클라이언트로 전달하기 - 4
댓글
댓글 쓰기