Q. 슬랙 기능 중 CRUD와 직접 관련 없는 기능들?
미들웨어 형식으로 구현했다.
const s3Client = new S3Client({
region: 'ap-northeast-2',
credentials: {
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SECRET_KEY,
},
});
const allowedExtensions = ['.png', '.jpg', '.jpeg', '.bmp'];
export async function deleteExistingFile(bucket, key) {
const deleteParams = {
Bucket: bucket,
Key: key,
};
try {
console.log('키 : ' + key);
await s3Client.send(new DeleteObjectCommand(deleteParams));
console.log('기존 프로필 사진 삭제');
} catch (err) {
console.log('기존 프로필 사진 삭제 에러 :', err);
}
}
const imageUploader = multer({
storage: multerS3({
s3: s3Client,
bucket: 'udongimages',
key: (req, file, callback) => {
const imageType = req.body.imageType;
const uploadDirectory =
imageType === 'profile' ? 'profileImages' : 'communityImages';
const extension = path.extname(file.originalname);
if (!allowedExtensions.includes(extension)) {
return callback(new Error('잘못된 extension'));
}
const newFileName = `udong_${Date.now()}${extension}`;
callback(null, `${uploadDirectory}/${newFileName}`);
},
acl: 'public-read-write',
}),
});
기존에 프로필 사진이 있으면 자동 삭제된다. key값을 어떻게 받아오는지 궁금했는데 S3 파일 주소(req.file.location)의 뒷부분이 key가 되는 것 같았다.