如何从节点中的云功能读取存储在Google存储桶中的txt文件

时间:2020-04-02 17:30:49

标签: node.js google-cloud-platform google-cloud-functions google-cloud-storage

我已经编写了一些位于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);
  });

2 个答案:

答案 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('未找到')} 返回