Firebase - 互联网离线时上传图片
Posted
技术标签:
【中文标题】Firebase - 互联网离线时上传图片【英文标题】:Firebase - uploading images when internet is offline 【发布时间】:2016-12-13 20:40:16 【问题描述】:Firebase 有很好的选择,即使您处于离线状态,也可以使用他们的数据库并将数据发送到他们的数据库,然后当连接再次建立时,它会自动将数据发送到数据库。
是否也可以使用 Firebase 存储,例如即使互联网关闭也可以发送图像,然后当互联网再次打开时,它会自动发送图像文件?
如果是这样,我该怎么做?如果不使用 Firebase,还有其他选择吗?
【问题讨论】:
是的。 Firebase 存储客户端支持恢复上传。见firebase.google.com/docs/storage/android/… 另一个方向呢?换句话说,有图片我想在在线时下载? 你有没有找到一个好的解决方案?我正在考虑将上传信息存储在 Firestore 中,并有一个单独的线程监控来处理上传。 【参考方案1】:是的。 Firebase 存储客户端支持恢复上传。 有关上传内容,请参阅 Firebase 存储文档(ios、Web、Android)。
Android 从那里开始:
uploadTask = mStorageRef.putFile(localFile);
sessionUri = uploadTask.getUploadSessionUri();
//save the sessionUri to persistent storage in case the process dies.
然后继续:
//resume the upload task from where it left off when the process died.
//to do this, pass the sessionUri as the last parameter
uploadTask = mStorageRef.putFile(localFile,
new StorageMetadata.Builder().build(), sessionUri);
更新 (20160809)
处理 sessionUri 的一种方式:
-
创建
uploadTask
时,获取sessionUri
并将其存储到应用程序的SharedPreferences
。
uploadTask
完成后,从应用的SharedPreferences
中删除 sessionUri。
应用重启时,检查SharedPreferences
中是否有sessionUri
。如果是这样:继续上传。
【讨论】:
@FrankvanPuffelen:我们离线时是否可以使用“sessionUri”将文件上传到 Firebase 存储。当应用上线时,firebase 会自动将该文件上传到 firebase 存储。当我们已经开始上传时,您的解决方案有效。 @Arpit Patel :我相信,虽然如果上传中断,弗兰克的解决方案可以工作,但除非您在某个时候有在线连接,否则您实际上无法获得“sessionUri”。对于 Firebase 存储,没有内置机制可以将该文件保存在本地缓存中并对其进行跟踪。这仅适用于 Firebase 数据库或 FireStore。 离线模式下我没有得到 Sesson Uri @JeffPadgett 好点,会话来自与 Firebase 存储实例的连接!此功能将非常有用,应该很快就会实现。目前,我正在研究基于 SQLite 的离线解决方法,以跟踪稍后要上传的本地文件......您是否知道其他替代方案? :) @varun,这正是我所做的。除了我实际上将文件的位置存储在共享首选项中,因为那样我很奇怪。在线时,检查 SQLite 或 Shared Preferences 数据库中是否存储了任何文件,然后上传。【参考方案2】:从技术上讲,考虑到 OP 问题,接受的答案是不正确的,即,
即使互联网关闭也发送图像
接受的答案谈到一旦开始就恢复下载,这在细节上是正确的,但没有正确解决答案。
更正的答案是“否”,如果设备未连接到互联网,则无法将图像上传到 Firebase Firestore,上传将失败并且上传操作不会自动重启。
如前所述,您必须连接到互联网,至少要有足够长的时间才能开始上传并从 Firebase 获取 uploadsessionuri URI。上传开始后,您可以继续上传 using this sample code 或上面的代码。
如文档中所述,简历 URI 的有效期约为 7 天,但开发人员有责任确保文件内容自上传开始后未发生更改。
【讨论】:
以上是关于Firebase - 互联网离线时上传图片的主要内容,如果未能解决你的问题,请参考以下文章
如何在用户离线时尝试将数据添加/上传到 Firebase 时显示错误?