我正在使用sharp在一个使用Typescript
编写的Node.js
/Express
应用程序中调整上传的图像大小。成功调整大小后,我想删除原始文件。对于png
和gif
输入图像,操作成功终止,我有调整大小的图像,并且原始图像已被删除。对于jpg
和tif
图像,调整大小是成功的,但是unlink
命令失败,并显示以下错误:
EBUSY: 资源正忙或已锁定,无法删除“...”
就好像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));
}
我漏掉了什么?
sharp
能够与 Promises 一起使用吗? 它可以被await
吗? - robertklepunlink
删除一个仍然打开的文件不是问题,我假设你正在使用这种操作系统,因为你使用了正斜杠。如果你在 Windows 上,请查看 此问题 及其解决方案。 - robertklep