在我使用承诺的fs.writeFile
保存文件后,我正尝试将图像文件发送到Google Vision,但出现错误,提示找不到文件或目录。
我添加了一个获取文件大小的功能,以确认文件存在,然后再将请求发送给Vision且文件已创建。
我也将路径名命名为现有文件,并且Google Vision正常运行。
所以我想这只是设置保存文件和向Google Vision发送请求之间的时间。
这是我的代码:
let generateFileName = (suffix, ext) => {
let filename;
let date = new Date();
return filename = `${suffix}${date.getDate()}${date.getMonth()}${date.getFullYear()}${date.getTime()}${ext}`;
}
let saveToFile = (base64Image, pathName) => new Promise((resolve, reject) => {
const writeFile = util.promisify(fs.writeFile);
writeFile(pathName, base64Image, { encoding: 'base64' })
.then(() => getSize(pathName))
.then((size) => size > 0 ? console.log('size is good') : console.log('size is bad'))
resolve(pathName)
});
let getSize = (filename) => {
const stats = fs.statSync(filename);
const fileSizeInBytes = stats.size;
console.log('Image size in bytes:' + fileSizeInBytes);
return fileSizeInBytes;
}
app.post('/', (req, res) => {
if (req.body.image !== null) {
let pathname = `./images/${generateFileName("photo", ".jpg")}`;
saveToFile(req.body.image, pathname)
.catch(err => console.log(err))
.then(pathname => visionClient.webDetection(pathname)) //
.then(labels => sendLabel(labels))
.then(res.send("File saved"))
.catch(err => {
console.error('ERROR:', err);
})
}
//...
}
这就是我在控制台中看到的内容:
ERROR: { Error: ENOENT: no such file or directory, open
'./images/photo11120191549923812361.jpg'
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: './images/photo11120191549923812361.jpg' }
Image size in bytes:61282
size is good
如何解决此问题?我应该只添加setTimeout吗?还是有其他更好的解决方案来克服此错误?