【问题标题】:StorageProgress Report function is not called by GetFileAsyncGetFileAsync 未调用 StorageProgress Report 函数
【发布时间】:2017-04-27 11:16:34
【问题描述】:

我正在尝试从 Firebase 存储下载我的游戏的资源文件,并显示下载进度。但是我遇到了 GetFileAsync 函数的奇怪行为。文件下载过程中不定期调用StorageProgress的Report函数,如参考中所述。在将文件放入内存(下载)后,在保存到磁盘期间调用报告函数。我做错了什么?

    string resourcesURL = "URL_TO_RESOURCE_FILE"; // https://firebasestorage.googleapis.com/......    
    public void UpdateProgress(float val)
    {
        labelProgress.text = Mathf.RoundToInt(val * 100f) + "%";
        circleProgress.fillAmount = val;
    }

    void OnDownloadClick()
    {
        SetDownloadingView();
        string saveToPath = GetParentFolder() + "/resources.bin";

        StorageReference fileRef = FirebaseBackend.Instance.GetStorage().GetReferenceFromUrl(resourcesURL);

        StorageProgress<Firebase.Storage.DownloadState> progressHandler = new StorageProgress<Firebase.Storage.DownloadState>(state =>
        {
            Debug.Log(String.Format ("Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount));

            UpdateProgress(state.BytesTransferred / state.TotalByteCount);
        });

        Task dwnTask = fileRef.GetFileAsync
        (
            saveToPath, 
            progressHandler, 
            CancellationToken.None
        );

        dwnTask.ContinueWith(resultTask => 
        {
            if (!resultTask.IsFaulted && !resultTask.IsCanceled) 
            {
                ResetView();
                Debug.Log("Download finished!");
            }
            else
            {
                ResetView();
                Debug.Log("Download fail!");
            }
        });
    }

Unity 版本为 5.5.0f3 Firebase Unity SDK 版本为 3.0.1

【问题讨论】:

    标签: c# firebase unity3d firebase-storage


    【解决方案1】:

    您可能根本没有做错任何事。

    根据this post,这是一个 Firebase 错误,将在下一次 Firebase 更新中解决。

    【讨论】:

    • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
    【解决方案2】:

    尝试使用 IEnumerator,这是我的代码,存储进度正常:

    protected IEnumerator downloadObject(string target_file, string target_path, int item_index)
    {
        if (target_file != "")
        {
            FirebaseStorage storage = FirebaseStorage.DefaultInstance;
    
            string local_url = target_path.Replace("\\", "/").Replace("//", "/");
            StorageReference storage_ref =
                storage.GetReferenceFromUrl(FB_Conf.gsURL + target_file);
    
            Task task = null;
            try
            {
                task = storage_ref.GetFileAsync(local_url,
                    new Firebase.Storage.StorageProgress<DownloadState>((DownloadState state) =>
                {
                // called periodically during the download
                    long tbyte = state.TotalByteCount;
                    file_progress = (float)state.BytesTransferred / (float)tbyte;
                }), CancellationToken.None);
            }
            catch (Exception exc)
            {                
                Debug.Log("Get file async error: " + exc.Message);
            }
    
            if (task != null)
            {
                yield return new WaitUntil(() => task.IsCompleted);
                task.ContinueWith((resultTask) =>
                {
                    if ((resultTask.IsFaulted) || (resultTask.IsCanceled))
                    {
                        error_count++;
                        string msg = (resultTask.IsCanceled) ? "Download error." : "";
                        if ((resultTask.Exception != null) &&
                            (resultTask.Exception.InnerExceptions.Count > 0) &&
                            (resultTask.Exception.InnerExceptions[0] is Firebase.Storage.StorageException))
                            msg = ((Firebase.Storage.StorageException)resultTask.Exception.InnerExceptions[0]).HttpResultCode.ToString();
                        else if (resultTask.Exception != null)
                            msg = resultTask.Exception.Message;                        
                    }
                });
            }
            else
            {
                error_count++;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2019-12-19
      • 2015-03-09
      • 1970-01-01
      • 2021-07-05
      相关资源
      最近更新 更多