【问题标题】:Firebase storage to store image and using the url in realtime database from firebase functionsFirebase 存储来存储图像并使用来自 firebase 函数的实时数据库中的 url
【发布时间】:2020-05-31 03:18:14
【问题描述】:

我们有 firebase nodejs 函数,可以从我们的合作伙伴网站获取 base64 图像数据。我们将这些数据存储到 Firebase 存储中,如下所示:

const storageRef = admin.storage().bucket(bucketName)
const fileRef = storageRef.file('myimage.png')
await fileRef.save(base64Image) 

此处用于此目的的存储桶具有只读属性,因此安全性不是问题。如何获取存储在存储桶中的图像的 url 以放入我的实时数据库?

在 UI 方式中,我可以直接从 firebase 控制台上传图片并可以看到链接。我需要这个链接。

根据我对谷歌的研究,我发现由于存储桶的安全性,获取下载网址是服务器端的一个问题,您需要获取过期的签名网址。就我而言,因为它是公开的,所以我希望有办法获取网址。

另一种方法是完全绕过存储桶并将 base64 图像直接存储到实时数据库中,但由于 base64 字符串的长度非常大,我对此并不满意。理想情况下,我的图像将在几 kbs 的范围内。

如何处理?

【问题讨论】:

    标签: node.js firebase firebase-realtime-database firebase-storage firebase-admin


    【解决方案1】:

    你有两个选择:

    1. 使用服务器端生成具有很长有效期的签名 URL。
    2. 在客户端生成一个(不会过期的)下载 URL。

    要使用下载 URL,您需要:

    1. 上传时将图片路径写入数据库。
    2. 让客户端检测到数据库中有他们的图片的下载 URL。
    3. 如果没有下载地址,让客户端根据路径生成下载地址,并写入数据库。

    【讨论】:

    • 虽然第二个选项更诱人,但没有涉及客户端,所以我不确定如何使用此选项?是否有非常长的到期日期签名网址的代码示例?
    • 您可以随时创建客户端应用程序,仅用于此目的。长过期代码示例:stackoverflow.com/questions/42956250/…
    • 肯定想要投票和回答,并且正在尝试您提到的任何内容。关于你的评论的一个问题:你说我总是可以为此目的创建一个客户端应用程序。试图更多地了解这一点。你的意思是我可以在firebase函数中创建一个客户端应用程序并使用它还是你的意思完全是别的?
    • 不。您无法在 Cloud Functions 中创建客户端应用程序。如果在 Cloud Functions 中有另一种方法,stackoverflow.com/questions/42956250/… 上接受的答案可能不会有那么多的赞成票(包括我的)。
    • 我用 signedUrl 方式让它工作。但是,带有 signedUrl 选项的 256 个字符的 url 非常长。我有存储桶的公共读取访问权限,但仍然删除该超长签名会引发访问错误。无论如何要让它更短
    猜你喜欢
    • 1970-01-01
    • 2020-10-23
    • 2021-07-18
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多