【问题标题】:Firebase onFinalize doesn't trigger for functions emulatorFirebase onFinalize 不会触发函数模拟器
【发布时间】:2022-01-12 18:08:07
【问题描述】:

我正在为本地开发设置环境,只是测试模拟器是否正常工作,但我的简单测试失败,没有任何错误。

// functions/index.js
exports.pdftoimg = functions.storage.object().onFinalize(async (object) => {
  console.log({ object });
});

模拟器启动没有问题:

firebase emulators:start
i  emulators: Starting emulators: auth, functions, firestore, hosting, pubsub, storage
✔  functions: Using node@16 from host.
i  hosting: Serving hosting files from: dist
✔  hosting: Local server: http://localhost:5002
i  functions: Watching "/Users/xxx/Code/myApp/functions" for Cloud Functions...
✔  functions[us-central1-pdftoimg]: storage function initialized.

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://localhost:4000                │
└─────────────────────────────────────────────────────────────┘

但是当我使用 UI (http://localhost:4000/storage/default-bucket) 将测试 pdf 文件上传到存储模拟器时,日志中没有显示任何内容。

我测试了 Firestore Db 的云触发器,但这似乎有效。

我错过了什么?

谢谢

【问题讨论】:

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


【解决方案1】:

我可以看到你是Triggering a Cloud Function on Cloud Storage Changes,它返回上传的object metadata

但是,这个函数不会上传文件:

onFinalize在桶中成功创建新对象(或现有对象的新一代)时发送。这包括复制或重写现有对象。上传失败不会触发此事件。

在这种情况下,请遵循提供给Upload Files 的文档。 最后,在您的代码中添加Error Handling 将在下次帮助您,因为在这种情况下您没有日志或任何可以调试错误的东西。

更新:

这个问题onFinalize trigger not working in emulator,使用相同的云函数并获得相同的结果。我们必须等待支持。

经过一些研究,一位同事发现这个 github 问题使用了与您相同的文档和相同的方法。 第一个描述了‘onFinalize’ is triggered even on failed upload: 以及如何重定向到上面提到的文档。在这种情况下,该函数在不应该触发时触发,您可以尝试像这样执行它。

【讨论】:

  • 您是说以编程方式上传而不是通过 Web UI 上传会触发onFinalize?当然,我可以尝试确认,但如果是这样,那么它确实是一个错误。在存储桶中如何创建对象并不重要。
  • 不,抱歉。我的意思是您可能没有正确接收数据,和/或您没有使用正确的上传方法,以防万一。我找不到任何关于如何处理这些数据的示例,但我链接了对象元数据的文档,您可能想尝试仅获取某些属性并查看它是否有效,例如:object.nameobject.metadata .我找到了另一个可能有帮助的 question
  • @eozzy 只是想知道您是否已经阅读了我的回答中的更新,并希望您能提供一些反馈。
  • 这为我解决了这个问题:github.com/firebase/firebase-tools/issues/…
  • 太好了,如果我的答案中提到的链接有用,您能否考虑为我的答案投票,因为它可以帮助未来看到此讨论的用户?
猜你喜欢
  • 2020-05-16
  • 2019-12-10
  • 2020-09-19
  • 2019-04-10
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2019-10-10
  • 2020-05-17
相关资源
最近更新 更多