으로 작성된 Node.js
/Express
응용 프로그램에서 업로드 된 이미지의 크기를 조정하려면 sharp을 사용하고 있습니다. 크기 조정이 완료되면 원본 파일을 삭제하고 싶습니다. png
및 gif
입력 이미지의 경우 작업이 성공적으로 종료되고 크기가 조정 된 이미지가 있고 원본이 삭제됩니다. jpg
및 tif
이미지의 경우, 크기 조정에 성공, 그러나 unlink
명령은 다음과 같은 오류와 함께 실패합니다(node.js 모듈) 예리한 이미지 프로세서가 원본 파일을 열어두고 크기를 조정 한 후 원본의 링크를 끊을 수 없습니다.
EBUSY: resource busy or locked, unlink '...'
에도 여전히 크기 조정 작업의 완료 후, 잠겨 입력 파일을 유지하는 것 sharp().resize()
것처럼.
import { existsSync, unlinkSync } from "fs";
import { normalize, parse } from "path";
var argv = require("yargs").argv;
var sharp = require("sharp");
var appRoot = require("app-root-path") + "/";
let resizeTest = async function (filename: string): Promise<boolean> {
try {
let nameParts = parse(filename);
let source = appRoot + filename;
let destination = appRoot + nameParts.name + "_resized" + nameParts.ext;
let fileExists = await existsSync(source);
if (!fileExists) {
console.log("Input file not found. Exiting.");
return false;
}
let resizeResult = await sharp(source)
.resize(128, 128)
.toFile(destination);
console.log("Resize operation terminated: ", resizeResult);
await unlinkSync(source);
console.log("unlinkSync operation terminated.");
return true;
} catch (error) {
console.log("An error occured during resizeTest execution: ", error.message);
return false;
}
}
if (argv._.length === 0) {
console.log("Usage: node sharptest.js FILENAME");
} else {
let resizeResult: Promise<boolean> = resizeTest(argv._[0]);
resizeResult.then(result => console.log("Returning from execution with ", result));
}
내가 무엇을 놓치고 :
여기에 설명 된 동작을 테스트 할 수있는 코드는?
'샤프한'약속이 작동합니까? '기다릴 수 있을까? – robertklep
@robertklep 예 : http://sharp.dimens.io/en/stable/api-output/ toFile()은 콜백이 제공되지 않을 때 약속을 반환합니다. –
일반적으로 열려있는 파일에 대해'unlink '를 호출하는 것은 유닉스 유형 OS에서 문제가되지 않습니다. 왜냐하면 당신이 슬래시를 사용하기 때문에 사용하고 있다고 가정했기 때문입니다. Windows 사용자 인 경우 [이 문제] (https://github.com/lovell/sharp/issues/487) 및 해당 솔루션을 확인하십시오. – robertklep