如何在 Firebase 存储中恢复文件下载?

Posted

技术标签:

【中文标题】如何在 Firebase 存储中恢复文件下载?【英文标题】:How to resume a file download in firebase Storage? 【发布时间】:2016-11-02 10:05:36 【问题描述】:

我需要使用 Firebase 存储下载一个大文件, 我的用户可能会在下载过程中遇到网络中断,我希望能够恢复此下载任务。

 FileDownloadTask downloadTask = firebaseStorage.getReferenceFromUrl(url).getFile(localFile);

    downloadTask.addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() 

        @Override
        public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) 
                Log.v(TAG, "progress" + taskSnapshot.getBytesTransferred());;
            
    );

    downloadTask.addOnFailureListener(e -> 
        CustomLogger.v(TAG, "downloadTask, on Failed: " + courseId);
        deleteFilesAfterError(courseId);
    );

    downloadTask.addOnPausedListener(taskSnapshot
            -> CustomLogger.v(TAG, "downloadTask, on paused: " + courseId));

最后两个监听器永远不会被调用。当我设置完整的监听器时:

downloadTask.addOnCompleteListener()

我的应用崩溃了。

即使我设置了:

firebaseStorage.setMaxDownloadRetryTimeMillis(2000);

然后在下载过程中关闭我的网络,downloadTask 失败监听器不会触发。该任务似乎仍在“进行中”,但没有下载数据。该功能的文档很差。我应该如何实现它?

失败的监听器似乎坏了 当我添加一个 completeListener 时,我的应用程序崩溃了 firebaseStorage.setMaxDownloadRetryTimeMillis 好像没有 任何效果

知道如何处理文件下载的恢复功能吗?

【问题讨论】:

【参考方案1】:

当你说你在下载过程中关闭了网络,你是怎么做到的?

我问的原因是,如果您暂时离开活动以关闭网络流,那么您的问题可能是活动生命周期问题。

如果您离开活动并且不在onPause()onStop() 等中处理此问题,那么您可能会遇到这种行为。

除此之外,您的代码看起来类似于文档(我的代码运行良好),除了您没有“链接”您的方法来添加侦听器(应该不是问题)。

但是,您在此处复制和粘贴的代码已部分折叠,并且未显示您是否覆盖 onFailure(Exception e) 方法,但我认为它已折叠在该箭头中。

如果您仍在处理此问题,能否发布您在崩溃时收到的任何错误的跟踪信息?

下面是网络故障时的一段代码,仅供参考:

FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageReference = storage.getReferenceFromUrl("gs://your-bucket/");

storageReference.getFile(localFile).addOnSuccessListener(YourActivity.this, new OnSuccessListener<FileDownloadTask.TaskSnapshot>() 
                @Override
                public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) 

                    
                
            ).addOnFailureListener(YourActivity.this, new OnFailureListener() 
                @Override
                public void onFailure(@NonNull Exception exception) 

                
            

【讨论】:

我不再处理它了,这段代码发生在服务中,所以不链接到任何活动生命周期。我正在使用手机提供的普通按钮关闭和打开网络

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

如何存储firebase身份验证会话

如何从 Firebase 控制台恢复已删除的项目

登录firebase后我可以恢复密钥[ID] - ionic 3

NetApp FAS2240-4存储误删除文件夹几个月后如何恢复数据

使用所有分支恢复 gitlab 备份存储库捆绑文件

求问如何在MTP模式下恢复手机的文件?