【问题标题】:How to send more than 4kb from google cloud function to end user如何从谷歌云功能发送超过 4kb 给最终用户
【发布时间】:2021-11-26 01:40:19
【问题描述】:

我编写了一个应用程序,允许用户上传带有手写文本的图像,现在他/她应该将提取的文本作为“普通”(数字)文本接收。

目前,我将图片上传到 google cloud bucket,然后触发 cloud function,调用 vision api。然后,视觉 api 在云函数内返回 JSON 结果。

现在我的问题是:如何将 JSON 结果发送回客户端?

  • 我试过FCM,但是vision api的JSON响应超过4000字节,所以消息发送失败。 (我还需要已识别文本的坐标)。收到以下错误:
...
errorInfo: {
    code: 'messaging/invalid-argument',
    message: 'Request contains an invalid argument.' 
}
  • 我听说过 PubSub,但正如他们所描述的 here ,它不适合服务到客户端的通信。或者它是一个永远不会少的选择?

如何将“大”结果从我的云功能发送回客户端?

非常感谢任何帮助!感谢您的宝贵时间,如果有任何不清楚或遗漏的地方,我很乐意尽快添加信息。

【问题讨论】:

    标签: node.js google-cloud-functions google-cloud-messaging


    【解决方案1】:

    GCS 通常可以方便地传递大型物体。您可以将请求重定向到 GCS 中的任何大对象。

    1. 如果是公开的,只需将 Location: https://storage.googleapis.com/%3Cbucket-name%3E/some-path/some-file.json 传递给调用者
    2. 如果文件是私有的,创建一个短暂的signed URL,然后像上面一样重定向到它。

    这样您就不需要通过 GCF 流式传输文件,甚至不需要阅读它。让 GCS CDN 为您完成这项工作。

    【讨论】:

      【解决方案2】:

      不要使用 FCM 将视觉 API 的实际负载发送给用户。相反,将有效负载存储在 Cloud Storage 或云数据库(例如 Firebase 的 Firestore 或实时数据库)中,并通过数据属性中的 FCM 将位置发送给用户。然后,您的应用程序代码可以获取该数据属性,并在用户准备好时读取实际的 API 响应。

      【讨论】:

        猜你喜欢
        • 2018-02-08
        • 1970-01-01
        • 2020-10-25
        • 1970-01-01
        • 2020-05-27
        • 2021-11-06
        • 1970-01-01
        • 2019-05-15
        • 2020-12-04
        相关资源
        最近更新 更多