为什么 Sharp 输出相同的文件,即使我已经更改了输入文件?
Why does Sharp output the same file, even though I have changed the input file?
用 Sharp 对 JPG 进行缩放和着色后,我立即删除了输入文件。当我上传同名的新文件时,Sharp 将输出旧文件。我 运行 在 Ubuntu 16.04.
上使用 NodeJS
这是编辑文件的代码:
sampleFile.mv(__dirname + "/" + name + "." + ext, function(err) {
if (err)
return res.status(500).send(err);
res.send('File uploaded!');
if (ext != "xlsx") {
// This will attempt to resize the images
console.log("Sharpening image")
sharp(__dirname + "/" + name + "." + ext).resize({ height: 27 }).flatten( { background: '#ffffff' } ).toFile("/var/www/my_ip/file.jpg")
.then(function(newFileInfo) {
// newFileInfo holds the output file properties
console.log("Success")
try {
fileSystem.unlinkSync(__dirname + "/" + name + "." + ext)
//file removed
} catch(err) {
console.error(err)
}
})
.catch(function(err) {
console.log("Error occured with file " + name + "." + ext + " | Dir: " + __dirname);
console.log(err)
try {
fileSystem.unlinkSync(__dirname + "/" + name + "." + ext)
//file removed
} catch(err) {
console.error(err)
}
//})
}); //this line errored
}
});
我第一次 运行 它时,它按预期工作,但是如果我第二次 运行 使用的文件与原始文件同名,它会以某种方式记住旧文件并输出它。我不确定它是如何记住该文件的,因为我立即将其删除。关于如何解决此问题的任何想法?
编辑:为确保问题与未正确删除第一个文件无关,我进行了快速测试。首先,我使用服务器编辑 1 个文件,并按照预期将编辑后的文件作为输出。现在,我不再编辑同名的新文件,而是重新启动服务器,然后编辑同名的新文件。它现在可以正确输出新文件。我相信 NPM 一定有一些我不知道的缓存,如果我的理论是正确的,目前正在阅读文档。
是的,我的理论是正确的! Sharp 确实有一个缓存,并且出于某种原因使以前编辑过的文件保持打开状态。这可能对优化有好处,但如果你和我有同样的问题,而且你不担心优化,你可以像这样打开缓存:
sharp.cache(false);
用 Sharp 对 JPG 进行缩放和着色后,我立即删除了输入文件。当我上传同名的新文件时,Sharp 将输出旧文件。我 运行 在 Ubuntu 16.04.
上使用 NodeJS这是编辑文件的代码:
sampleFile.mv(__dirname + "/" + name + "." + ext, function(err) {
if (err)
return res.status(500).send(err);
res.send('File uploaded!');
if (ext != "xlsx") {
// This will attempt to resize the images
console.log("Sharpening image")
sharp(__dirname + "/" + name + "." + ext).resize({ height: 27 }).flatten( { background: '#ffffff' } ).toFile("/var/www/my_ip/file.jpg")
.then(function(newFileInfo) {
// newFileInfo holds the output file properties
console.log("Success")
try {
fileSystem.unlinkSync(__dirname + "/" + name + "." + ext)
//file removed
} catch(err) {
console.error(err)
}
})
.catch(function(err) {
console.log("Error occured with file " + name + "." + ext + " | Dir: " + __dirname);
console.log(err)
try {
fileSystem.unlinkSync(__dirname + "/" + name + "." + ext)
//file removed
} catch(err) {
console.error(err)
}
//})
}); //this line errored
}
});
我第一次 运行 它时,它按预期工作,但是如果我第二次 运行 使用的文件与原始文件同名,它会以某种方式记住旧文件并输出它。我不确定它是如何记住该文件的,因为我立即将其删除。关于如何解决此问题的任何想法?
编辑:为确保问题与未正确删除第一个文件无关,我进行了快速测试。首先,我使用服务器编辑 1 个文件,并按照预期将编辑后的文件作为输出。现在,我不再编辑同名的新文件,而是重新启动服务器,然后编辑同名的新文件。它现在可以正确输出新文件。我相信 NPM 一定有一些我不知道的缓存,如果我的理论是正确的,目前正在阅读文档。
是的,我的理论是正确的! Sharp 确实有一个缓存,并且出于某种原因使以前编辑过的文件保持打开状态。这可能对优化有好处,但如果你和我有同样的问题,而且你不担心优化,你可以像这样打开缓存:
sharp.cache(false);