multer로 S3 폴더 삭제하기

codeing999·2023년 8월 1일
0

Node NPM

목록 보기
15/16

폴더 안에 아무 내용이 없다면 그냥 파일 하나 삭제할 때와 똑같이 deleteObject 만 써서 삭제하면 되지만
폴더 안에 파일들이 있다면 그것들을 먼저 삭제해준 뒤에
폴더를 삭제해야 한다.

그래서 다음과 같은 절차로 진행한다.

  1. listObjectsV2() 메서드를 사용하여 폴더 내의 모든 객체(파일)의 Key를 조회
  2. 조회된 Key를 기반으로 deleteObjects() 메서드를 사용하여 모든 객체를 삭제
  3. 마지막으로, 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;
  }
};
profile
코딩 공부 ing..

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

많은 도움이 되었습니다, 감사합니다.

답글 달기