JS Coding
[node.js] error: eperm: operation not permitted, unlink 파일 이미지 등록 본문
함수로 만들어
png 파일은 파일 프로세스 사용중이어도 삭제 가능하지만
JPEG 파일은 프로세스 사용중이면 삭제가 불가능 하다.
그래서 강제적으로 프로세스 종료를 시켜주는 함수를 불러 실행 시켜줘야 한다.
async function deleteFileWithForce(filePath) {
try {
await fs.promises.unlink(filePath); // 기본적으로 파일 삭제 시도
console.log(`File ${filePath} deleted successfully`);
} catch (err) {
console.warn(
`File ${filePath} could not be deleted with unlink. Trying force delete...`,
);
if (process.platform === 'win32') {
await forceDeleteFileWindows(filePath);
} else {
await forceDeleteFileUnix(filePath);
}
console.log(`File ${filePath} force deleted successfully`);
}
}
시스템 별로 삭제가 정해진다.
// Windows 시스템에서 강제로 파일 삭제
function forceDeleteFileWindows(filePath) {
return new Promise((resolve, reject) => {
exec(`del /F "${filePath}"`, (error, stdout, stderr) => {
if (error) {
return reject(new Error(`Error deleting file ${filePath}: ${stderr}`));
}
resolve(stdout);
});
});
}
// Unix-like 시스템에서 강제로 파일 삭제
function forceDeleteFileUnix(filePath) {
return new Promise((resolve, reject) => {
exec(`rm -f "${filePath}"`, (error, stdout, stderr) => {
if (error) {
return reject(new Error(`Error deleting file ${filePath}: ${stderr}`));
}
resolve(stdout);
});
});
}
// 에러 발생 시 파일 삭제
async function fn_errorDeleteImages(pstFiles, files) {
try {
const filePaths = [
...pstFiles.map((file) => file.path),
...Object.values(files).flatMap((file) => file.map((f) => f.path)),
];
for (const filePath of filePaths) {
await deleteFileWithForce(filePath);
}
console.log('All files deleted');
} catch (err) {
console.error('Error deleting files:', err);
}
}
끝