【问题标题】:Firebase cloud function image resizeFirebase 云功能图像调整大小
【发布时间】:2019-01-03 17:21:50
【问题描述】:

按照这里的例子https://github.com/firebase/functions-samples/blob/master/generate-thumbnail/functions/index.js

图片处理完毕后如何通知客户?

我想让表单上传照片并将其调整为多种尺寸。云功能完成后如何让客户知道?

我正在使用firebase/storage 上传图像客户端,然后我有一个功能可以监听要上传的文件functions.storage.object().onFinalize 并处理/调整图像大小。云功能完成后是否有回调客户端或我需要设置发布/订阅?

【问题讨论】:

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


    【解决方案1】:

    Firebase 图像大小调整存在两个问题 - (1) 图像大小调整完成后通知客户端很棘手,以及 (2) 您永远不知道客户端应用可能需要哪个确切大小(假设您是构建响应式应用)。

    这两个问题可以通过使用动态图像大小调整方法来解决。客户端应用程序可以将图像直接上传到 Google 存储(通过签名 URL 和 PUT 请求),一旦上传完成,它可以立即请求调整大小的图像。例如:

    https://i.kriasoft.com/sample.jpg - 原图 https://i.kriasoft.com/w_200,h_100/sample.jpg - 动态调整图片大小

    调整后的图像可以缓存在 Google Storage 存储桶和 CDN 中。

    $ npm install image-resizing --save
    
    const { createHandler } = require("image-resizing");
    
    module.exports.img = createHandler({
      // Where the source images are located.
      // E.g. gs://s.example.com/image.jpg
      sourceBucket: "s.example.com",
    
      // Where the transformed images need to be stored.
      // E.g. gs://c.example.com/w_80,h_60/image.jpg
      cacheBucket: "c.example.com",
    });
    

    https://github.com/kriasoft/image-resizing

    【讨论】:

      【解决方案2】:

      您最终的新图片(小图片 - 或其他任何图片)会有一些 URL,比如 storageCompany.net/123123123123.jpg

      因此,在您的实时 Firebase 中,您将拥有一些提供这些 URL 的位置。

      所以也许像..

      user/NNNN/photos/thumbnails
      

      所以要清楚,你可能有

      user/NNNN/photos/thumbnails/726376733677.jpg
      user/NNNN/photos/thumbnails/808080188180.jpg
      user/NNNN/photos/thumbnails/363636636636.jpg
      

      现在你正在添加

      user/NNNN/photos/thumbnails/123123123123.jpg
      

      确实,您的应用程序只会监视出现在该位置的新项目(即字符串 - URL)!


      为了清楚起见,假设您有一个显示“任何类型的图像”的 ios 或 droid 应用,这是一个 Firebase 项目。

      因此,在您的示例中是“由服务器创建”的“缩略图”。

      但是你展示的是什么类型的图像并不重要。

      在一个

      • Firebase 项目,其中
      • “显示图像”

      基本的想法就是我在上面解释的内容 - 你只是有一种或另一种方式,一个具有“图像 URL”的 Firebase 位置

      就这么简单!

      一旦图像“准备好”——无论发生什么情况——上传,图像由 3D 软件生成.. 无论如何..

      这就是您制作“带有图像”的 Firebase 项目的方式。 iOS、机器人或 www。

      当然有很多变化。在这个例子中..

      我们有一个包含许多“图像”的大文件夹。每个“图片”都有很多字段,包括各种实际图片 URL(缩略图、大缩略图、视频等)

      正如您所问,“缩略图”(例如)URL 仅在该图像已创建并上传到某个存储 URL 时出现!

      享受

      【讨论】:

      【解决方案3】:

      您必须在客户和您的职能部门之间安排一个交换点。通常,这将是函数将写入结果的数据库中的某个已知位置,并且客户端可以侦听更改以了解工作何时完成。

      您正在使用的示例需要进行修改,以允许客户端和服务器提前就唯一位置达成一致。

      【讨论】:

        猜你喜欢
        • 2020-03-23
        • 2019-05-17
        • 1970-01-01
        • 2017-10-23
        • 2018-09-09
        • 2011-02-21
        • 2020-05-10
        相关资源
        最近更新 更多