如何使用Firebase存储将"直接链接"存储到图像

Rod*_*hos 19 firebase firebase-storage

我需要通过直接链接访问存储在Firebase存储上的图像,例如

http://myfirebasehost.com/storage/imgIwant.png
Run Code Online (Sandbox Code Playgroud)

据我所知,它只能使用协议的这种类型的URL gs://,但是,它不能通过链接访问,只能在SDK api中访问.

我需要一个完全如上所述的使用Firebase平台的解决方案,如果不可能,接受其他建议.

我的代码有常量,是指向图像的链接.事实证明,如果我想更新这张图片,我必须进行新的部署.相反,我想在同一个URL更新图像.使用firebase(据我所知)这是不可能的,因为Storage提供的URL不能通过链接访问.

另一种方法是将图像转换为Base64并存储在数据库中,但将是非常广泛的和不切实际的.

Mik*_*ald 15

使用Firebase存储,您将获得两个可用于表示文件的URL:

// "Private" internal URL, only accessible through Firebase Storage API
// This is protected by Firebase Storage Security Rules & Firebase Auth
gs://bucket/object

// "Public" unguessable URL, accessible by anyone with the link
// This is secured because that token is *very* hard for someone to guess
https://firebasestorage.googleapis.com/v0/bucket/object?alt=media&token=<token>
Run Code Online (Sandbox Code Playgroud)

第一个选项要求您使用该reference.getDownloadURL()方法将内部gs://URL转换为公共https://URL.

第二个选项允许您与受信任的个人共享此公开但不可取的URL,并允许他们无需身份验证即可访问内容到Firebase或使用您的应用 - 考虑与Google相册共享家庭照片.可能这种行为已经足够好了,除非你希望公共共享干净的URL.您可以在浏览器中使用此URL,也可以使用任何其他HTTP库来下载它.我们也提供下载这些文件的能力(参考文献),因此您不需要获得第三方库,您可以使用我们.

我强烈建议您阅读我们的文档以获取更多相关信息.

  • @DoruChidean在您覆盖文件时更改令牌,或者在Web控制台中使令牌无效. (3认同)
  • 令牌是否会更改?我想将完整的URL保存在与对象关联的数据库中,并在以后使用。(不对孩子使用getDownloadUrl) (2认同)

fio*_*bio 7

如何将您翻译gs storage locationdirect url示例:

gs://nobs-f32f2.appspot.com/profile/1s_by_wlop-dc1sdan.jpg

变成

https://firebasestorage.googleapis.com/v0/b/nobs-f32f2.appspot.com/o/profile%2F1s_by_wlop-dc1sdan.jpg?alt=media

1st确保网址转义您的Blob路径。例如,将正斜杠(/)换成%2F,将空格()换成%20。

2nd确保您已在需要的地方打开了读取访问权限。这是一个前进的开放规则:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if true;
      allow write: if request.auth != null;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 是否可以没有 ?alt=media ? (2认同)

Gle*_*enn 7

2020 年,我很难弄清楚这一点,尤其是因为CharacterSetSwift 中编码字符串的局限性(或者很可能我遗漏了一些东西)。

以下是我如何在 Firebase 存储(上传后)上转换 Blob 的“路径”(文件夹路径)的步骤。

  1. 给定上传后的存储元数据,(在 iOS 中,我们有一个名为FIRStorageMetadata.的类)获取名为pathand的字符串对象bucket
  2. 正确编码路径字符串!这个很重要!如果您错过了一个字符,很明显,当您尝试下载完整的直接 URL 时,您会收到错误消息。

    • 在 iOS 中,我使用 CharacterSet 对路径字符串进行编码urlHostAllowed。但是,这还不够,就像我上面说的,要么没有 CharacterSet 将字符串编码为包含“+'加号的 URL 。所以使用 编码后urlHostAllowed,我调用替换出现字符串方法,替换“+”“%2B”
    • 测试您是否正确编码路径字符串的一种方法是将您的编码结果与您可以从 Firebase 存储 UI 获得的结果进行比较。
  3. 连接字符串:

瞧!

常见问题

  1. 我们可以省略令牌吗?是的,当然了。它只是有效。自从我学会了就一直在做。
  2. 我们可以省略?alt=media吗?不!你只会得到一个 json 格式的字符串,而不是文件。


Ted*_*Ted 6

对于那些只想获得链接的人

console > Storage

选择一张特定的照片,你会看到下面的链接. 在此输入图像描述