【问题标题】:get cloud storage file from firebase cloud function从 Firebase 云功能获取云存储文件
【发布时间】:2019-08-08 01:33:43
【问题描述】:

我希望我的 firebase 网络应用程序上传一个文件,并且我希望有一个云功能来发现这个文件并根据它的内容创建一个数据库对象。这是我尝试过的许多变体中的最后一个变体......

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const { Storage } = require('@google-cloud/storage');

admin.initializeApp();
const db = admin.firestore();

exports.onStorageFinalize = functions.storage.object().onFinalize((object) => {
  const storage = new Storage();
  const bucket = storage.bucket('my app's storage bucket name');

  return bucket.file(object.name).download(function (err, contents) {
    // problem: no err, no contents, set doesn't run just a warning about promises!
    const result = `got err=${err}, contents=${contents}`
    return db.collection('myCollection').doc().set({
      result: result
    })
  });
});

非常小的文件被上传,这个触发器运行。当我不尝试获取文件的内容时,数据库对象会被很好地创建(使用文字字符串而不是文件结果)。

但是当我如上所示运行它时,首先我会收到一条警告:

onStorageFinalize:函数返回未定义、预期的 Promise 或 价值

错了。 file().download() 的文档说它返回了一个承诺......而且,更重要的是,数据库 set() 没有运行。

谷歌文档在这个看似主流的用例上是多么令人困惑和晦涩(我认为是错的?),这让我感到震惊。如果有人可以提供帮助,我们将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    正如您将在 File 对象的 Google Cloud Storage Node.js 客户端文档中看到的那样,您必须省略回调才能使 download() 方法返回 Promise。

    你调用download() 方法的方式你没有返回一个承诺,因此你收到了错误。

    所以你需要这样做:

    return bucket.file(object.name).download()
        .then(data => {
            const contents = data[0];
            // Do something with the contents constant, e.g. derive the value you want to write to Firestore
    
            return db.collection('myCollection').doc().set({
               value: ......
            });
    
        });
    

    【讨论】:

    • 谢谢。看起来您的回答也发送了回调?箭头函数?不过现在就试试吧……感激不尽。
    • 对不起,我的回答有误,我忘记了 then()。我会适应它。
    • 我看到了你提供的链接(非常有帮助),但我想了解发送给 promise contents = data[0]; 的参数什么是数据,什么是数据 [0] 中的“blob”,以及如何从我的文件中查看纯文本?
    • 非常感谢您的帮助!!我找到了一个关于 blob 的文档并使用了 data[0].toString()
    猜你喜欢
    • 2021-01-12
    • 2017-12-21
    • 2018-11-17
    • 2021-10-28
    • 1970-01-01
    • 2018-11-13
    • 2017-08-20
    • 2021-10-16
    • 2017-10-09
    相关资源
    最近更新 更多