如何在云功能中获取存储file.txt内容

时间:2017-10-13 01:36:42

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

我在云存储中有一个file.txt,我想在云功能中读取其内容(用文字创建一个数组)。

var myBucket = gcs.bucket(bucket_name);
var myFile = myBucket.file(file_name);

myFile.download().then(function(err, data) {
   if (data) {
     response.send(data.toString());
   }
});

当我运行此云功能时,我收到以下错误:

ApiError:app_name@appstpot.gserviceaccount.com没有storage.objects.get访问该文件

我已经去了IAM区域并将此角色/权限添加到此服务帐户,但我一直收到此错误。

有人可以帮助我吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

假设您要将CSV文件的内容保存到Firestore / Realtime数据库。

const functions = require('firebase-functions');
const gcs = require('@google-cloud/storage')();
const path = require('path');

exports.uploadHandler = functions.storage.object().onFinalize((object) => {
    const filename = path.basename(object.name);
    const bucket = gcs.bucket(object.bucket);

    if (object.contentType !== 'text/csv') {
        console.log('This is not a CSV file.');
        return null;
    }

    bucket.file(filename).download((err, contents) => {
        if (err) {
            console.log('error', err);
            return null
        }

        toJSON(contents.toString());
    });
});

function toJSON(content) {
    const rows = content.split("\n");
    const header = rows[0].split(',');

    for (let i = 1; i < rows.length; i++) {
        const cells = rows[i].split(',');
        const jsn = {};
        for (let j = 0; j < cells.length; j++) {
            if (cells[j] !== '') jsn[header[j]] = cells[j];
        }

        jsn[header[0]] && toDB(jsn)
    }
}

function toDB(jsn) {
    // Here you can add you firestore/ realtime database or merge the JSON if you want to batch write.
    console.log(jsn)
}