Nodejs - 尝试使用 Exiftool 编辑图像的元数据
Nodejs - trying to edit images' metadata with Exiftool
我目前正在开发一个 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 文件创建得很好但是执行行执行 "nothing" (或者我无法确定的东西)。
此代码使用同步函数,我用异步函数对其进行了测试,这是相同的行为。
目前,要执行我需要的操作,我必须执行上面的代码来创建 JSON 文件,然后我必须注释 writeFileSync 行并且我必须重新执行代码以正确更新图像的元数据。
真的很奇怪,我尝试在 exec 行之前读取 JSON 文件内容,但一切正常。我使用过异步函数,有和没有承诺......没有什么可做的,它不起作用。
感谢您的帮助。
我会回答我自己的问题:
问题是我使用了 nodemon,但是默认情况下 nodemon 监视 JSON 文件。但是在我的代码中,我创建了一个 JSON 文件以在之后立即使用它。所以,我正确地创建了 JSON 文件,nodemon 看到了它,并重新启动了节点服务器;其余代码没有 运行.
为了解决这个问题,我在 package.json:
中添加了一个选项来忽略创建的文件
"nodemonConfig": {
"ignore": [
"path/to/files/to/ingore/*"
]
}
我目前正在开发一个 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 文件创建得很好但是执行行执行 "nothing" (或者我无法确定的东西)。 此代码使用同步函数,我用异步函数对其进行了测试,这是相同的行为。
目前,要执行我需要的操作,我必须执行上面的代码来创建 JSON 文件,然后我必须注释 writeFileSync 行并且我必须重新执行代码以正确更新图像的元数据。
真的很奇怪,我尝试在 exec 行之前读取 JSON 文件内容,但一切正常。我使用过异步函数,有和没有承诺......没有什么可做的,它不起作用。
感谢您的帮助。
我会回答我自己的问题:
问题是我使用了 nodemon,但是默认情况下 nodemon 监视 JSON 文件。但是在我的代码中,我创建了一个 JSON 文件以在之后立即使用它。所以,我正确地创建了 JSON 文件,nodemon 看到了它,并重新启动了节点服务器;其余代码没有 运行.
为了解决这个问题,我在 package.json:
中添加了一个选项来忽略创建的文件"nodemonConfig": {
"ignore": [
"path/to/files/to/ingore/*"
]
}