为什么即使我更改了输入文件,Sharp 仍输出相同的文件?

Asg*_*and 7 javascript ubuntu node.js sharp

使用 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
    }

  });
Run Code Online (Sandbox Code Playgroud)

我第一次运行它时,它的工作方式就像预期的那样,但是如果我第二次运行使用的文件与原始文件具有相同的名称,它会以某种方式记住旧文件并输出它。我不确定它是如何记住该文件的,因为我立即删除了它。有想法该怎么解决这个吗?

编辑:为了确保问题与第一个文件未被正确删除无关,我做了一个快速测试。首先,我使用服务器编辑 1 个文件,然后将编辑后的文件作为输出,正如预期的那样。现在,我不再编辑同名的新文件,而是重新启动服务器,然后编辑同名的新文件。现在它可以正确输出新文件。我相信 NPM 一定有一些我不知道的缓存,目前正在阅读文档,如果我的理论是正确的。

Asg*_*and 12

是的,我的理论是正确的!Sharp 确实有缓存,并且出于某种原因使以前编辑的文件保持打开状态。这可能有利于优化,但如果您遇到与我相同的问题,并且您不担心优化,您可以像这样打开缓存:

sharp.cache(false);
Run Code Online (Sandbox Code Playgroud)

  • 有一天,我一直在试图弄清楚为什么我在客户端中的输入发送了不同的文件,但在服务器中却不断地一遍又一遍地获取相同的文件!并发现这是我的节点 api 服务器上的问题,最后发现它默认缓存它! (3认同)