我已经编写了一些位于Cloud Function源代码中的node.js代码。当它运行时,我想从Google存储桶中读取文本文件并进行处理。
该代码在本地运行时运行良好,但是由于某些原因在Cloud Function中运行时无法正常工作。我希望控制台日志中会写出一些内容。
我看不到任何错误,因为我认为这可能是权限问题(尽管可能在错误的位置)。
有什么想法吗?
awaits和async只是因为我希望它在继续之前等待响应,但这似乎也没有影响。
const fileName = 'testData.txt';
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('my_bucket_name');
const remoteFile = bucket.file(fileName);
await remoteFile.download(async function(err, contents) {
console.log("file err: "+err);
console.log("file data: "+contents);
});
答案 0 :(得分:0)
您可以做的是验证该功能的runtime account是否具有访问存储桶的必要权限。通常,运行时帐户为PROJECT_ID@appspot.gserviceaccount.com
,并至少添加 Storage Object Viewer (您可以检查更多角色here)。
然后,再次测试该功能。如果出现问题,请检查该功能的日志。
编辑
不确定,但似乎与代码有关。我已经使用以下工具来测试该功能并完美运行:
index.js :
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const bucket = storage.bucket('bucket_name');
const fileName = 'test.txt';
const remoteFile = bucket.file(fileName);
exports.helloWorld = (req, res) => {
console.log('Reading File');
var archivo = remoteFile.createReadStream();
console.log('Concat Data');
var buf = '';
archivo.on('data', function(d) {
buf += d;
}).on('end', function() {
console.log(buf);
console.log("End");
res.send(buf);
});
};
package.json :
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"@google-cloud/storage": "^4.7.0"
}
}
答案 1 :(得分:0)
异步函数readStorageFile(obj){
try{
obj.Result = ''
if (obj.filename===undefined) return
bucket = gcs.bucket('gs:yourinfo');
//Get File
await bucket.file(obj.filename).download()
.then(async data => {
obj.data = data
obj.Result = 'OK'
return
})
.catch(err => {
return
})
return
}
抓住(错误){
返回
}
}
obj = {文件名:'TEST1.json'} 等待readStorageFile(obj,'testing') 如果(obj.Result ==='OK'){console.log('obj.data ='+ obj.data)} 其他{console.log('未找到')} 返回