Exemple #1
0
        IEnumerator UploadFile(string filePath, string name)
        {
            UploadHandler uploadHandler = new UploadHandlerFile(filePath);
            //Debug.Log(FirebaseConfig.storageEndpoint + GetAuthParam());
            RequestHelper req = new RequestHelper
            {
                Uri    = FirebaseConfig.storageEndpoint,
                Params = new Dictionary <string, string>
                {
                    { "uploadType", "media" },
                    { "name", string.IsNullOrEmpty(path)?name:$"{path}/{name}" }
                },
                ContentType   = "application/octet-stream",
                UploadHandler = uploadHandler
            };

            // Authenticate request if any user signed in
            if (FirebaseAuthentication.currentUser != null)
            {
                req.Headers.Add("Authorization", "Bearer " + FirebaseAuthentication.currentUser.accessToken);
            }


            RESTHelper.Post(req, res =>
            {
                UploadResponse uploadResponse = JsonUtility.FromJson <UploadResponse>(res);

                uploadResponse.downloadUrl = $"{FirebaseConfig.storageEndpoint}/{uploadResponse.name.Replace("/","%2F")}?alt=media&token={uploadResponse.downloadTokens}";

                callbackHandler.successCallback?.Invoke(uploadResponse);
            },
                            err =>
            {
                callbackHandler.exceptionCallback?.Invoke(err);
            });

            float lastProgress = 0f;

            //Progress Callback
            if (uploadProgressCallback != null)
            {
                while (uploadHandler.progress != 1)
                {
                    uploadProgressCallback.Invoke(uploadHandler.progress);
                    yield return(new WaitUntil(() =>
                                               uploadHandler.progress >= 0.95f? uploadHandler.progress == 1f : //If reached 95% or avobe, we will wait for 100%
                                               uploadHandler.progress >= lastProgress + 0.05f));               //Else, we will wait for reaching next 5%
                }
                uploadProgressCallback.Invoke(1f);
                uploadHandler.Dispose();
            }
        }