본문 바로가기
Nodejs

[Nodejs] express js에서 AWS S3스토리지에 저장된 파일 삭제하기

by teamnova 2023. 8. 26.

안녕하세요. 지난 번에 expressjs 프레임워크를 사용하여 AWS S3스토리지에 저장한 파일이 존재하는지 여부를 확인해보았는데요, 오늘은 존재하는 파일을 삭제해보도록 하겠습니다. 

 

이 글을 참고해서 셋팅해주시기 바랍니다. 

https://stickode.tistory.com/876

 

// 스틱코드
router.get('/stickode', async (req, res) => {
  bucket = { Bucket: '버킷명', Key: `경로` }
  const eixst = await checkExist(s3);
  console.log('eixst', eixst);

    if (eixst) {
        const deleteSuccess = deleteFiles(bucket);
        if (deleteSuccess) {
            return res.send('delete~~~');
        } else {
            return res.send('not delete~~~');
        }
  } else {
    return res.send('not exist~~~');
  }

  function checkExist(s3, list) {
    console.log('checkExists()');

    // 파일 존재하는지 조회
    return new Promise((resolve, reject) => {
      s3.headObject(bucket, function (err, exists_data) { // 1개씩 확인가능
        console.log('headObject() bucket: %o', bucket);
        if (err) {
          console.log(`File ${bucket.Key} does not exist.`);
          return resolve(false);
        } else {
          console.log(`File ${bucket.Key} exists. checking...`);
          return resolve(true);
        }
      });
    })
    }
    

  // 오브젝트 삭제
  function deleteFiles(bucket) {
    console.log('deleteFiles() 입장 Bucket:', bucket);
    
    params = {
      Bucket: bucket.Bucket, 
      Delete: {
       Objects: [
        {
          Key: bucket.Key
        }
       ], 
       Quiet: false // (참고) Delete API 요청에 대한 응답에 삭제 작업의 성공/실패 여부와 관련된 정보
      }
    };

    return new Promise((resolve, reject) => {
      Promise.all([
        s3.deleteObjects(params).promise()
      ]).then(delete_data => {
        console.log(`File deleted successfully.`, delete_data);  // 조회O 삭제O
        resolve(true);
      }).catch(err => {
        console.log('err:', err.stack);
        reject(err); // catch문으로 이동
      });
    });
    }
    
});
 

headObject()로 파일을 존재하는지 확인했다면, 
deleteObjects()로 파일을 삭제합니다. 

오늘도 읽어주셔서 감사합니다. 좋은 하루 보내세요