【问题标题】:Nodejs - trying to edit images' metadata with ExiftoolNodejs - 尝试使用 Exiftool 编辑图像的元数据
【发布时间】:2019-06-09 23:06:35
【问题描述】:

我目前正在开发一个 NodeJS (Express) 项目,以使用 Exiftool 编辑图像的元数据。 要使用 Exiftool 编辑图像的元数据,我必须创建一个 JSON 文件,其中包含要修改的所有元数据,然后执行命令:

exiftool -j=metadata.json pathToTheImage/image.jpg

json 文件必须如下所示:

[{"SourceFile":"pathToTheImage/image.jpg","XMP-dc:Title":"Image's title"}]

这是我的代码:

const {exec} = require('child_process');
let fs = require('fs');
let uploadPath = "uploads";
let uploadName = "image.jpg";

...

app.post('/metadata/editor', (req, res) => {
    let jsonToImport = [...];
    fs.writeFileSync("metadata.json", JSON.stringify(jsonToImport));
    exec('exiftool -j=metadata.json ' + uploadPath + '/' + uploadName, (error, stdout, stderr) => {
        if (error) {
            console.error(error);
            return;
        }
        res.redirect('/metadata/checker/' + uploadName);
    });
});

问题在于“writeFileSync/exec”级别。 这两行独立运行良好,也就是说,如果我只有第一行,那么 JSON 文件就创建好了。如果我只有第二行,图像的元数据就会得到很好的更新。 但是当我一起执行这两行时,JSON 文件创建得很好,但 exec 行“什么都不做”(或者我无法确定的事情)。 这段代码使用了同步函数,我用异步函数测试过,这是一样的行为。

目前,要做我需要的,我必须执行上面的代码来创建 JSON 文件,然后我必须注释 writeFileSync 行并且我必须重新执行代码以正确更新图像的元数据。

真的很奇怪,我尝试在 exec 行之前读取 JSON 文件内容,但一切正常。我使用过异步函数,有无承诺……没有什么可做的。

感谢您的帮助。

【问题讨论】:

  • Exec是同步函数,需要等待回调才能重定向用户
  • @user2821420,确实,我在问题的代码中错了,但问题仍然存在。我把它和 execSync() 搞混了。

标签: json node.js express exiftool


【解决方案1】:

我会回答我自己的问题:

问题是我使用 nodemon,但默认情况下 nodemon 监视 JSON 文件。但是在我的代码中,我创建了一个 JSON 文件以便之后立即使用它。所以,我正确创建了 JSON 文件,nodemon 看到它,并重新启动节点服务器;其余代码不运行。

为了解决这个问题,我添加了一个选项来忽略 package.json 中创建的文件:

"nodemonConfig": {
   "ignore": [
      "path/to/files/to/ingore/*"
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2013-10-09
    • 2012-08-05
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多