我已经编写了一些node.js代码,这些代码位于云函数的源代码中。当它运行时,我想从谷歌存储桶中读取一个文本文件,并对其进行处理
代码在本地运行时运行良好,但由于某些原因在云函数中运行时不起作用。我希望从控制台日志中写出一些内容。
我看不到任何错误,因为我认为这可能是权限问题(可能是找错地方了(。
有什么想法吗?
等待和异步只是因为我希望它在继续之前等待响应,但这似乎也没有影响。
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);
});
您可以做的是验证函数的运行时帐户是否具有访问bucket所需的权限。通常,运行时帐户是PROJECT_ID@appspot.gserviceaccount.com
,并且至少添加存储对象查看器(您可以在此处查看更多角色(。
然后,再次测试该功能。如果出现问题,请检查该函数的日志。
编辑
不确定,但可能与代码有关。我使用了以下内容来测试该功能,并且运行良好:
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"
}
}
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
}catch(err({return
}}
obj={filename:'TEST1.json'}wait readStorageFile(obj,'testing'(if(obj.Result=="OK"({console.log('obj.data='+obj.data(}else{console.log("未找到"(}返回