Я пытаюсь отправить файл изображения в Google Vision сразу после сохранения файла, используя обещанное fs.writeFile
, но получаю сообщение об ошибке, говорящее о том, что файл или каталог не найден.
У меня естьдобавлена функция, позволяющая определить размер файла, чтобы убедиться, что файл существует до того, как я отправлю запрос в 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?или есть какое-то другое лучшее решение для преодоления этой ошибки?