我需要通过直接链接访问存储在Firebase存储上的图像,例如
http://myfirebasehost.com/storage/imgIwant.png
据我所知,它只能使用协议gs://
这种类型的URL,但是,只有在SDK api中才能通过链接访问它。
我需要完全按照上述使用Firebase平台的解决方案,如果不可能,请接受其他建议。
我的代码有常量,是指向图像的链接。事实证明,如果我想更新这张图片,我必须进行新的部署。相反,我想在同一个URL更新图像。根据我的知识,使用firebase执行此操作是不可能的,因为存储提供的URL无法通过链接访问。
另一个替代方案可能是将图像转换为base64并存储在数据库中,但是会非常广泛且不切实际。
答案 0 :(得分:14)
使用Firebase存储,您将获得两个可用于表示文件的网址:
// "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>
第一个选项要求您使用reference.getDownloadURL()
方法将内部gs://
网址转换为公开https://
网址。
第二个选项允许您与受信任的个人共享此公开但不可取的URL,并允许他们在未经Firebase身份验证的情况下访问内容或使用您的应用 - 考虑与Google相册共享家庭照片。可能这种行为已经足够好了,除非你希望公共共享干净的URL。您可以在浏览器中使用此URL,也可以使用任何其他HTTP库来下载它。我们也提供下载这些文件的能力(参考文献),因此您不需要获得第三方库,您可以使用我们。
我强烈建议您阅读our docs以获取更多相关信息。
答案 1 :(得分:7)
2020年,我很难解决这个问题,尤其是因为Swift中CharacterSet
编码字符串的局限性(或者很可能我缺少了一些东西)。
以下是我设法在Firebase Storage(上传后)上转换Blob的“路径”(文件夹路径)的步骤。
FIRStorageMetadata
的类。)获得名为path
和bucket
的字符串对象。正确编码路径字符串!这个很重要!如果您错过了一个字符,当您尝试下载完整的直接URL时,显然会出现错误。
urlHostAllowed
对路径字符串进行编码。但是,这还不够,就像我在上面说的那样,是没有CharacterSet将字符串编码为包含“ +'加号的URL。
因此,在使用urlHostAllowed
进行编码之后,我调用了替换出现字符串方法,将“ +” 替换为“%2B” 连接字符串:
Voila!
常见问题解答
?alt=media
吗?不!您只会得到json格式的字符串,而不是文件。答案 2 :(得分:5)
答案 3 :(得分:5)
如何通过示例将gs storage location
翻译为direct 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
请确保URL转义您的blob路径。例如,为%2F交换正斜杠(/
),为%20交换空格()。
2nd
确保您已根据需要打开读取权限。这是一个开放的规则:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if true;
allow write: if request.auth != null;
}
}
}
答案 4 :(得分:0)
另一个选项是以下格式的URL:
https://storage.googleapis.com/PROJECT-ID/FILEPATH
PROJECT-ID
:Firebase项目的项目ID
FILEPATH
:项目文件的路径
答案 5 :(得分:0)
2020
Firebase已连接到Google Cloud Platform:
您需要在Google Cloud Platform上公开存储桶或所需的对象,然后您将获得一个简单的链接而无需对其进行编辑:
您还可以在不公开数据的情况下使用该链接(但随后您必须登录才能访问):
转到Google Cloud Platform>选择项目>存储>浏览器>打开存储区appID.appspot.com>打开任何对象,然后您就拥有了uri(Firebase控制台提供)和URL。
答案 6 :(得分:0)
转换为公共 URL 检查示例。
假设链接是 gs://funzone-website.appspot.com/public/logo.jpg
let g=funzone-website.appspot.com/public/logo.jpg
如果有文件夹,用 % 替换文件路径。在上面的例子中,public是一个文件夹,添加?alt=media并添加o。
现在 g=funzone-website.appspot.com/o/public%2Flogo.jpg?alt=media
用 %2F 转换和替换路径(/)
要转换此使用 https://firebasestorage.googleapis.com/v0/b/{g}
或
如果没有文件夹(公共)则链接是
https://firebasestorage.googleapis.com/v0/b/funzone-website.appspot.com/o/logo.jpg?alt=media