Firebase存储:如何存储和检索图片

293

如何在Firebase上存储和查看图像?


1
很酷,如果我使用Firebase存储图像,我可以使用Firebase登录来保证安全性。 - mrwaim
7
昨天,Firebase发布了一个名为Firebase Storage(firebase.google.com/docs/storage)的新功能,可以上传和下载任意类型的文件(图像、视频、音频等)。它基于Google Cloud Storage(cloud.google.com/storage)支持PB级别的存储,并具有竞争力的价格。你一定要去看看 :) - Mike McDonald
30
用户觉得它很有用,为什么关闭了? - Amr Lotfy
8
这并不是在要求推荐,所以为什么会被认为是需要关闭呢?这是关于一个软件服务的功能的问题 - 完全相关。 - user663031
5
我讨厌过早关闭评论。直截了当的问题不应该被关闭,求求你了! - Jeryl Cook
显示剩余2条评论
6个回答

287
更新(20160519)Firebase刚刚发布了一个名为Firebase存储的新功能。这允许您将图像和其他非JSON数据上传到专用存储服务中。我们强烈建议您使用此功能来存储图像,而不是将它们作为base64编码数据存储在JSON数据库中。

当然可以!根据您的图像大小,您有几个选择:

1. 对于较小的图像(小于10mb)

我们有一个示例项目,可以在这里找到:https://github.com/firebase/firepano

通常的方法是在本地加载文件(使用FileReader),以便您可以将其存储到Firebase中,就像存储任何其他数据一样。由于图像是二进制文件,您需要获取base64编码的内容,以便将其存储为字符串。或者更方便的是,您可以将其存储为data:url,然后准备好在img标记的src中插入它(这就是示例所做的)!

2. 对于较大的图像

Firebase确实有一个10mb(utf8编码字符串数据)的限制。如果您的图像更大,您需要将其分成10mb块。不过,您说得对,Firebase更适用于经常变化的小字符串,而不是多兆字节的字符串。如果您有大量静态数据,请务必使用S3或CDN。


8
Firebase有一个10MB的限制(UTF8编码字符串数据)。如果您的图像更大,您将不得不将它拆分成10MB的块。然而,您是正确的,Firebase更适合频繁变化的小字符串,而不是几兆字节的字符串。如果您有大量静态数据,我强烈建议使用S3或CDN。 - Michael Lehenbauer
14
Firebase需要在他们的托管系统中增加更大的存储空间,或者使用内置API的S3实例。 - The_Brink
9
谢谢您的反馈,@The_Brink。这绝对在我们的关注范围内! - Michael Lehenbauer
4
没错,我可能不会建议在大型生产网站中使用这种方法(你真的需要一个由 CDN 支持的图像服务),但对于许多用途来说,这种方法简单且“足够好”。 - Michael Lehenbauer
2
但是如果没有服务器端脚本,如何安全地连接到S3或CDN(不在客户端暴露凭据)以存储大型文档或图像。 - Dinesh
显示剩余8条评论

27
是的,您可以在Firebase中存储和查看图像。您可以使用文件选择器获取图像文件。然后,您可以按照自己的喜好托管图片,我更喜欢使用亚马逊s3。一旦图片被托管,您可以使用为图片生成的URL来显示图片。
希望这能帮到您。

3
请查看更新后的Firebase文档:https://firebase.google.com/docs/storage/#key_functions。 - Lukas Liesis
如果您要在亚马逊上托管图像,为什么不将其保存在Firebase存储中呢? - Ojonugwa Jude Ochalifu

20

我最终自己将图像以base64格式存储。当从Firebase回调时,我会从它们的base64值中转换它们。


1
这种方法唯一的问题是,当图像很大时,将它们移动到不同的活动中会使应用程序变慢,并且在某些情况下会崩溃。 - Ojonugwa Jude Ochalifu

11

您还可以使用名为Filepicker的服务,该服务将在其服务器上存储您的图像,而Filepicker现在已更名为Filestack,它将为您提供图像的URL。然后,您可以将URL存储到Firebase中。


我看到了你的评论中提到了这项服务,我尝试了一下,但并不是很满意。 - bpolat

3

有几种方法可以实现。我最初采用了Grendal2501的方式。然后我尝试了类似于user15163的方式,您可以将图像URL存储在Firebase中,并将图像托管在Firebase主机上,也可以是Amazon S3。


尝试插入和渲染图像时出现403错误-上传后图像权限问题-有关如何设置上传的任何信息。我尝试使用acl:'public-read' - 但然后上传失败-出现403错误。有关政策文档和存储桶策略的任何信息都将非常有帮助。 AWS-文档很难理解,除了访问被拒绝之外,没有其他调试信息。 - jamie
2
请将此作为另一个问题提出。 - Jakob Hartman
不错的主意:)做完了-尽管堆栈可能不同-如果你有什么见解可以给我-将不胜感激。AWS S3错误调试真是太令人沮丧了-至少到目前为止是这样。http://stackoverflow.com/questions/31998827/403-error-with-ng-file-upload-and-public-read-so-images-dont-render-firebase - jamie

2

在JSON中使用Base64字符串将非常重,解析器需要进行大量的处理。目前,Fresco仅支持base支持Base64。最好将其放在Amazon Cloud或Firebase Cloud上,并获取图像URL。这样,您就可以使用Picasso或Glide进行缓存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接