Google云平台在node.js中上传图片

时间:2017-12-31 08:34:52

标签: node.js firebase google-cloud-storage

我正在尝试使用google platform API将图片上传到node.js中的firebase存储,这是我的代码:

function upload_file(filename, buffer) {
    let file = bucket.file(filename);
    console.log(`file created: ${filename}`);
    file.save(buffer)
    .then(() => {
        console.log(`${filename} should be in bucket now`);
        return file.bucket.upload(filename);
    })
    .then((data) => {
        console.log(`upload succeed: ${filename}`);
    }).catch((err) => {
        console.log(err);
    });
}

这是输出:

file created: 7CD5F2FA-CB2F-4014-BB65-3BBC3D8B3254.jpg
7CD5F2FA-CB2F-4014-BB65-3BBC3D8B3254.jpg should be in bucket now
{ Error: ENOENT: no such file or directory, stat '7CD5F2FA-CB2F-4014-BB65-3BBC3D8B3254.jpg'
    at Error (native)
  errno: -2,
  code: 'ENOENT',
  syscall: 'stat',
  path: '7CD5F2FA-CB2F-4014-BB65-3BBC3D8B3254.jpg' }

我检查了我的水桶,我确实找到了刚刚上传的图像。但是,错误表示无法找到该文件。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的代码让我很困惑。看起来它正试图上传两次。

首先,您正在调用file.save(),其记录为:

  

将任意数据写入文件。

     

这是一个包装File#createWriteStream的便捷方法。

然后你打电话给bucket.upload(),记录为:

  

将文件上传到存储桶。这是一种包装方便的方法   文件#createWriteStream。

所以,我带走的是你两次调用File#createWriteStream。这没有意义。

此外,此代码没有意义:

return file.bucket.upload(filename);

由于File没有名为bucket的属性。我希望这段代码只是因为这个事实而失败。

我认为现在是时候更多地研究云存储API以确保您做的正确。