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

时间:2019-07-17 09:37:39

标签: javascript node.js ubuntu 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
    }

  });

我第一次运行它时,它的工作原理与预期的一样,但是,如果我第二次运行使用的文件与原始文件的名称相同,它将以某种方式记住旧文件并输出。我不确定如何记住该文件,因为我立即将其删除。有关如何解决此问题的任何想法?

编辑:为确保问题与未正确删除的第一个文件无关,我进行了快速测试。首先,我使用服务器编辑1个文件,然后按预期方式将编辑后的文件作为输出。现在,我没有重新编辑具有相同名称的新文件,而是重新启动了服务器,然后编辑了具有相同名称的新文件。现在,它正确地输出了新文件。我认为NPM必须具有一些我不知道的缓存,如果我的理论正确,那么目前正在阅读文档,以便阅读。

1 个答案:

答案 0 :(得分:0)

是的,我的理论是正确的! Sharp确实具有缓存,并且由于某种原因使先前编辑的文件保持打开状态。这可能对优化很有好处,但是如果您遇到与我相同的问题,并且您不担心优化,则可以将缓存设置为:

sharp.cache(false);
相关问题