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서버에 저장되는 것입니다.


GitHub Branch(downloadS3) URL


다음글 : NestJS 서버에 있는 파일을 클라이언트로 전달하기 - 4




댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Nest JS URL에 있는 쿼리(Query) 읽기