我试图执行.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.
仔细检查已分配给云函数的服务帐户帽子,以及是否已授予其所需的权限。
我认为Storage Object Viewer
会为您提供将文件读取缓冲区所需的内容。
默认情况下,如果您没有更改它,则会使用 AppEngine 的默认服务帐户,我认为该帐户无法访问存储。