【问题标题】:Cannot download file from Google Storage inside Cloud Function?无法从 Cloud Function 内的 Google Storage 下载文件?
【发布时间】:2020-09-30 05:13:57
【问题描述】:

我正在尝试执行一个简单的 .docx 文件信息下载缓冲区,以便稍后在我的云函数中处理它。我一直在为多个项目使用整个 Google 平台,但从来没有遇到过在服务器端下载的需要,现在我需要,但我不能。

以下代码不起作用,它只是发送超时作为响应(如果我尝试捕获它,我什至不会收到错误消息):

    var bucket = admin.storage().bucket("gs://myBucket.com");

return bucket.file("001Lineales/4x3-1/1000.docx").download().then((contents)=>{
                var buffer = contents[0];
                //I never get into this point
            }).catch((error)=>{
                //No error
            })

我尝试使用本地 NodeJs 脚本并按预期工作。还尝试执行readStream() 下载但没有运气,该功能在任何尝试下载文件时都会挂起。

return new Promise((resolve,reject)=>{
                var archivo = bucket.file(selectedCategory).createReadStream();
                var array = [];
                //Under here, never happens
                archivo.on('data', (d) => {array.push(d)}).on("end",()=>{
                    var newbuff = Buffer.concat(array);
                    resolve(newbuff)
                })
            })

文件的读/写权限是公开的。主要问题是调试很困难,因为我无法在本地模拟器中执行此功能。

我能做什么?提前致谢。

编辑:

使用模拟器再次检查本地通话,我收到以下错误:

Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.

【问题讨论】:

  • 你能分享你的依赖吗? (package.json 文件)

标签: google-cloud-functions google-cloud-storage


【解决方案1】:

仔细检查您分配给云功能的服务帐户帽子,以及您是否已授予它所需的权限。

我认为Storage Object Viewer 会为您提供将文件读入缓冲区所需的内容。

默认情况下,如果您没有更改它,则会使用 AppEngine 的默认服务帐户,我认为该帐户无法访问存储。

【讨论】:

  • 这是在云函数中运行的。
  • 是的,我明白了。但谷歌产品并非都可以免费访问其他产品,因为它运行在 GCP 中。这是一个重大的安全问题。因此,您必须明确授予权限,这是通过服务帐户完成的。从这里开始:cloud.google.com/iam/docs/understanding-service-accounts 它会解释一下它们是如何工作的,以及你的代码中可能发生的事情。
  • 感谢您的参考,真的很有帮助。我更改了服务帐户权限,现在它可以工作了。
猜你喜欢
  • 2017-11-08
  • 2018-01-18
  • 2019-02-14
  • 1970-01-01
  • 2021-04-25
  • 2013-08-19
  • 1970-01-01
  • 2016-08-19
  • 2020-05-05
相关资源
最近更新 更多