如何将刚刚保存在文件夹中的文件发送到Google Vision?

时间:2019-02-11 23:13:52

标签: node.js promise google-vision writefile

在我使用承诺的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吗?还是有其他更好的解决方案来克服此错误?

0 个答案:

没有答案