Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

JS Coding

[node.js] error: eperm: operation not permitted, unlink 파일 이미지 등록 본문

카테고리 없음

[node.js] error: eperm: operation not permitted, unlink 파일 이미지 등록

JSKJS 2024. 8. 21. 19:57

 

함수로 만들어 

 

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);
    }
}