Firebase - 在互联网离线时上传图片

dan*_*nji 14 firebase firebase-storage

即使您处于脱机状态,Firebase也可以选择使用他们的数据库并将数据发送到他们的数据库,然后当连接再次启动时,它会自动将数据发送到数据库.

即使互联网关闭,也可以使用Firebase存储,例如发送图像,然后当互联网再次启动时,它会自动发送图像文件吗?

如果是这样,我该怎么办?如果没有使用Firebase,还有其他选择吗?

Fra*_*len 10

是.Firebase存储客户端支持恢复上载.有关上传(iOS,Web,Android)的信息,请参阅Firebase存储文档.

从那里为Android:

uploadTask = mStorageRef.putFile(localFile);
sessionUri = uploadTask.getUploadSessionUri();
//save the sessionUri to persistent storage in case the process dies.
Run Code Online (Sandbox Code Playgroud)

然后恢复:

//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);
Run Code Online (Sandbox Code Playgroud)

更新(20160809)

处理sessionUri的一种方法:

  1. 当你创建它时uploadTask,获取sessionUri并将其存储到应用程序中SharedPreferences.
  2. 当uploadTask完成,从应用程序的删除sessionUri SharedPreferences.
  3. 当应用程序重新启动,检查是否有一个sessionUri的SharedPreferences.如果是这样:继续上传.

  • @FrankvanPuffelen:当我们离线时,是否可以使用'sessionUri'将文件上传到firebase存储.当应用程序上线时,firebase会自动将该文件上传到firebase存储.我们已经开始上传您的解决方案. (6认同)
  • @Arpit Patel:我相信虽然Frank的解决方案在上传中断时有效,但除非你在某个点上有在线连接,否则你实际上无法获得"sessionUri".对于Firebase存储,没有内置机制用于在本地缓存中保留该文件并跟踪它.这仅适用于Firebase数据库或FireStore. (5认同)
  • 离线模式下我没有收到 Sesson Uri (2认同)

Ken*_*Ken 6

从技术上讲,鉴于OP问题,接受的答案是不正确的,即

即使互联网关闭也发送图像

接受的答案谈到了一旦开始就恢复下载,它详细地纠正了但没有正确解决答案。

正确的答案是“否”,如果设备未连接到互联网,则无法将图像上传到 Firebase Storage,上传将会失败并且不会自动重新启动上传操作。

如前所述,您必须连接到互联网,至少连接到互联网足够长的时间才能开始上传并从 Firebase 获取uploadsessionuri URI。上传开始后,您可以使用此示例代码或上面的代码恢复上传。

如文档中所述,简历 URI 的有效期约为 7 天,但开发人员有责任确保文件内容自上传开始以来未发生更改。