[AWS] S3의 이미지 저장 및 삭제하기

주형(Jureamer)·2022년 6월 1일
2

개요


전 글인 [AWS]EC2에서 S3로 파일 복제하기에 이어서 Multer로 S3에 이미지 저장하는 부분을 알아보려고 합니다. 코드 작성 부분은 전부 Node.js로 진행합니다.

Multer로 S3에 이미지 저장/삭제하기

1. multer, aws-sdk 다운로드

우선 multer-s3와 aws-sdk를 다운로드 합니다.

npm install multer-s3 aws-sdk --save

2. awsconfig.js 작성

이후 aws-sdk 사용을 위해 awsconfig.js를 작성 합니다.
IAM 계정을 생성하지 않았다면 전 글을 참고하여 IAM을 생성하고, 받은 키를 입력하면 됩니다.

// awsconfig.js
{ 
    "region": "ap-northeast-2",
    "accessKeyId": "생성한 IAM AccessKeyID 입력",
    "secretAccessKey": "생성한 secretAccessKey 입력",
}

3. 이미지 저장 코드 작성

코드 작성은 아래와 같습니다.
key에 /이 들어가면 디렉토리를 의미하며 이는 곧 폴더/파일이 됩니다.

const multerS3 = require('multer-s3');
const aws = require('aws-sdk');
aws.config.loadFromPath(path.join(__dirname, '../config/awsconfig.json'));
const s3 = new aws.S3();

// 파일명 
const imageUpload = multer({
    storage: multerS3({
        s3: s3,
        bucket: 'community-test.com', // 버킷 이름
        contentType: multerS3.AUTO_CONTENT_TYPE, // 자동 콘텐츠 타입
        acl: "public-read", // 클라이언트에서 자유롭게 가용하기 위함
        key: (req, file, cb) => {
            const fileName = randomstring.generate(25); // 파일명 랜덤 25자
			const mimeType;
			switch (file.mimetype) { // 파일 타입을 거름
				case 'image/jpeg':
					mimeType = 'jpg';
					break;
				case 'image/png':
					mimeType = 'png';
					break;			
				default:
					mimeType = 'jpg';
					break;
			}
            cb(null, fileName + '.' + mimeType)
        }      
    }),
    limits: { fileSize: 5 * 1024 * 1024 } // 용량 제한 설정
})

4. 단일 이미지 삭제 코드 작성

function delete_file(file_dir , file_name)  {
      let params = {
        Bucket: 'community.bvoat.com',
        Key: file_dir.concat('/', file_name)
      };

      try {
        s3.deleteObject(params, function (error, data) {
          if (error) {
            console.log('err: ', error, error.stack);
          } else {
            console.log(data, " 정상 삭제 되었습니다.");
          }    
        })        
      } catch(err) {
        console.log(err);
        throw err;
      }
	});
}

이미지 삭제의 경우 여러 오브젝트를 삭제하거나, 버전관리를 할 시에 버전 ID를 지정해 삭제할 수 있다.
해당 부분은 이 글을 참조하자

참고


profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글