기타/문제해결

[nodeJS] fs.unlink 파일 삭제 시도 중 operation not permitted, unlink 에러발생

닉네임없음ㅎ 2024. 7. 19. 20:00

[nodeJS] fs.unlink 파일 삭제 시도 중 operation not permitted, unlink 에러발생

fs모듈

fs는 FileSystem의 약자로, fs모듈은 NodeJS에서 파일 입출력 처리를 할 때 사용한다. 

fs.unlink와 fs.unlinksync로 파일을 삭제할 수 있는데, 
unlink는 비동기 unlinksync는 동기적으로 파일을 삭제한다. 

 




내가 하고자 했던 작업은.. 



이렇게 앱서버가 있고, 
서버 루트폴더에 public/images 에 resized된 이미지가 있고
로컬 파일시스템에 user/images 에 원본 이미지가 있음.

그리고 삭제 api를 호출하면 
양쪽 경로에 있는 이미지를 삭제하는 거였는데...

fs.unlink(filePath)로 삭제를 하면 계속 

operation not permitted, unlink 이렇게 에러가 발생함.. 

근데 앱서버의 public/images 하위의 파일은 잘 삭제가 되는데 
로컬 파일시스템의 파일이 잘 삭제가 안되었음. 

로컬파일시스템에 접근권한이 없어서 그런가 하는 의심을 하긴했는데, 
계속 fs모듈로 시도를 했던이유가..
삭제가 아예 안되는건 아니고 
에러가 뜰때도 있고 아닐 때도 있어서 ^^...............(한가지만 해라 즌쯔,,,,,,,,,,,)

그래서 미련을 못버리고 계속 시도했는데 
갑자기 또 로컬 파일을 잘지우는 것................(이유는 모름)
근데 이대로 계속 개발을 진행하는건 완전 찝찝 

fs.unlink (또는 unlinkSync)로는 로컬 파일시스템의 파일을 안전하게 지울수 없다는 생각이 들어 

child_process의 exec를 사용하기로 했다. 

 

if(fs.existsSync(originalPath)){
      cp.exec(`del /f /q "${originalPath}"`, (error, stdout, stderr) => {
        if(error){
          console.log(`파일 삭제중 에러발생 : ${error.message}`);
          return;
        }
        if(stderr){
          console.log(`stderr: ${stderr}`);
        }
        console.log(`${originalPath} 파일 삭제됨 ! `);
      })
    }


삭제 잘 됨 ^^