在 Firebase 中存储下载的 Gif

Posted

技术标签:

【中文标题】在 Firebase 中存储下载的 Gif【英文标题】:Store Downloaded Gif in Firebase 【发布时间】:2019-10-04 02:12:54 【问题描述】:

我正在使用 Giphy APIFLAnimatedImage 存储库来获取和显示 gif。有没有办法将选定的 gif 存储到 firebasefirestore 以便以后获取?

我的原因是避免重新下载 gif 的繁重任务。它会存储Data 对象的字节吗?

我知道我可能只存储 gif url,然后当我需要 gif 时,查询字符串并重新下载,但如果有办法,我希望再次避免这种情况。

任何指导将不胜感激。

let url = URL(string: gifUrlString)!
let imageData = try? Data(contentsOf: url)
let image = FLAnimatedImage(animatedGIFData: imageData)

【问题讨论】:

我在 2015 年回答了 similar question - 该代码显示了如何在 Firebase 中存储和检索 .jpg 文件。令人困惑的事情是避免重新下载 gif 的繁重任务 - 如果将其存储在 Firebase 中,则必须重新下载它。此外,Firebase 实时数据库不是存储图像的最佳解决方案 - Firebase 的 Firebase Storage 非常适合该任务。 @Jay 感谢您的留言。如果你允许我在这方面不是超级方便,我想也许我们已经下载了 gif 并以字节为单位,并可能存储它,就未来的任务而言,剩下的就是从Firebase,然后将其渲染为 gif,而不是从 api 调用和重新下载。让我知道这是否有任何改变,谢谢! 如果您从 Firebase 获取字节,您将从 Firebase 下载字节,这与从 Firebase 下载 gif 完全相同。无论哪种方式,字节都是字节。还。 渲染为 gif 只是一组字节,不涉及渲染。不确定 从 API 重新下载 是什么意思,因为 Firebase 的作用是“下载”。它是一个在线实时数据库,与它的任何交互都会被下载/上传。例外情况是,如果您暂时断开连接,这就是持久性的来源。也许您认为 Firebase 是一个本地数据库? 【参考方案1】:

可以存储图片的数据

let imageData = try? Data(contentsOf: url)

Firebase putData function

但是您仍然需要使用 firebase getData 再次下载它,因此您可以使用 CoreData / Realm 在您的应用程序中创建一个简单的数据库结构,将每个 gif 与其下载的​​时间戳关联,然后将其上传到 Firebase 并更新您的本地数据库有了这些数据

顺便说一句避免使用Data(contentsOf,因为它会阻塞主线程直到获取日期,所以在后台线程中使用它

【讨论】:

以上是关于在 Firebase 中存储下载的 Gif的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 中存储下载的 Gif

从多个文件上传 Firebase 存储中获取下载 url

Firebase 存储异步图像下载随机顺序

如何从 Firebase 存储中下载图像并将其存储在颤动的列表中 [关闭]

使用 VueJs 在 firebase 中上传和下载存储图像

在上传文件之前生成 Firebase 存储下载 url