폴더 안에 아무 내용이 없다면 그냥 파일 하나 삭제할 때와 똑같이 deleteObject 만 써서 삭제하면 되지만
폴더 안에 파일들이 있다면 그것들을 먼저 삭제해준 뒤에
폴더를 삭제해야 한다.
그래서 다음과 같은 절차로 진행한다.
- listObjectsV2() 메서드를 사용하여 폴더 내의 모든 객체(파일)의 Key를 조회
- 조회된 Key를 기반으로 deleteObjects() 메서드를 사용하여 모든 객체를 삭제
- 마지막으로, deleteObject() 메서드를 사용하여 폴더 자체를 삭제
const deleteFolder = async function delete_folder(folderPath) {
let params = {
Bucket: process.env.AWS_BUCKET,
Delete: {
Objects: [],
},
};
// 폴더 내의 파일들을 삭제할 객체 목록에 추가
const filesInFolder = await listFilesInFolder(folderPath);
filesInFolder.forEach((file) => {
params.Delete.Objects.push({ Key: file.Key });
});
try {
// 폴더 내의 파일들을 삭제
await s3.deleteObjects(params).promise();
logger.info(`${folderPath} 폴더 내의 모든 파일이 삭제되었습니다.`);
// 폴더를 삭제
await s3.deleteObject({ Bucket: process.env.AWS_BUCKET, Key: folderPath }).promise();
logger.info(`${folderPath} 폴더가 삭제되었습니다.`);
} catch (error) {
throw error;
}
};
// 폴더 내의 파일 목록을 조회하는 함수
const listFilesInFolder = async function list_files_in_folder(folderPath) {
let params = {
Bucket: process.env.AWS_BUCKET,
Prefix: folderPath,
};
try {
const data = await s3.listObjectsV2(params).promise();
return data.Contents;
} catch (error) {
throw error;
}
};
많은 도움이 되었습니다, 감사합니다.