代码之家  ›  专栏  ›  技术社区  ›  Miguel Coder

如何从谷歌云功能节点连接到谷歌云存储

  •  0
  • Miguel Coder  · 技术社区  · 7 年前

    一切正常,但出于某种原因,我的谷歌云函数从存储API中得到了一个403错误。

    为了使我的GC函数能够访问GC存储,我必须做什么?

    我在文档中找不到任何可以说明如何执行此操作的内容。

    const { Storage } = require('@google-cloud/storage');
    
    // Creates a client
    const storage = new Storage();
    
    // Lists all buckets in the current project
    const buckets = storage.getBuckets();
    
    exports.uploadImage = (bucketName, fileName, imageBuffer, mimeType) => {
      return new Promise((resolve, reject) => {
    
        let bucket = storage.bucket(bucketName);
    
        let file = bucket.file(fileName);
        file.save(imageBuffer,
            {
                metadata: { contentType: `image/${mimeType}` },
            },
            ((error) => {
                error ? reject(error) : resolve()
            })
        );
      })
    }
    

    这是我得到的错误

    0 回复  |  直到 7 年前
        1
  •  5
  •   Dan Cornilescu    7 年前

    云功能(CF)由特定的服务帐户(在您的案例中)执行 directed-galaxy-221521@appspot.gserviceaccount.com ).来自 Runtime service account

    在函数执行期间,云函数使用服务帐户 PROJECT_ID@appspot.gserviceaccount.com 作为一种身份。

    由于访问存储桶/文件时出现403错误,这意味着它们无法公开访问,因此您需要向上述服务帐户授予必要的访问权限(至少) storage.objects.create Access Control Option 您选择并配置了存储。

        2
  •  2
  •   Miguel Coder    7 年前

    显然谷歌云有一些小问题。由于某些原因,除非已经创建了bucket,否则不允许对其进行写入。我换了房间 bucketName 对一个已经存在的bucket,我收到了200的响应。谷歌云应该发送404响应而不是403响应。403是误导性的,因为1。我的服务具有bucket创建权限和2。水桶一开始就不存在。就是说 404 Not Found 这将是适当的回应。我希望这对某人有帮助。