我在云存储中有一个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区域并将此角色/权限添加到此服务帐户,但我一直收到此错误。
有人可以帮助我吗?
提前致谢。
答案 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)
}