전 글인 [AWS]EC2에서 S3로 파일 복제하기에 이어서 Multer로 S3에 이미지 저장하는 부분을 알아보려고 합니다. 코드 작성 부분은 전부 Node.js로 진행합니다.
우선 multer-s3와 aws-sdk를 다운로드 합니다.
npm install multer-s3 aws-sdk --save
이후 aws-sdk 사용을 위해 awsconfig.js를 작성 합니다.
IAM 계정을 생성하지 않았다면 전 글을 참고하여 IAM을 생성하고, 받은 키를 입력하면 됩니다.
// awsconfig.js
{
"region": "ap-northeast-2",
"accessKeyId": "생성한 IAM AccessKeyID 입력",
"secretAccessKey": "생성한 secretAccessKey 입력",
}
코드 작성은 아래와 같습니다.
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 } // 용량 제한 설정
})
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를 지정해 삭제할 수 있다.
해당 부분은 이 글을 참조하자