总体例外:Firebase无法找到指定的图像

问题描述 投票:0回答:1

我一直在Unity中为AR应用程序编程,自从我开始使用Firebase以来,我刚刚过渡到ARCore,而且都是Google产品。我正在尝试将图像存储在Firebase上,并在运行时将其拉到AugmentedImageDatabase,但是由于某些原因,当我尝试下载图像时,Firebase总是给我FileNotFound异常。

我通过以下方式引用存储服务和存储桶

storageService = Firebase.Storage.FirebaseStorage.DefaultInstance;
storageRef = storageService.GetReferenceFromUrl("gs://avira-cc267.appspot.com"); //Name changed since permissions are temporarily open to public

[我尝试通过以下方式下载它们

foreach (Transform obj in imageTargets)
        {
            Firebase.Storage.StorageReference imageRef = storageRef.Child("ImageTargets/" + obj.gameObject.name + ".jpg");
            const long maxAllowedSize = 1024 * 1024; //1mb
            imageRef.GetBytesAsync(maxAllowedSize).ContinueWith((Task<byte[]> task) =>
            {
                if (task.IsFaulted || task.IsCanceled)
                {
                    Debug.Log(task.Exception.ToString()); //This is where the error is called.
                }
                else
                {
                    byte[] fileContents = task.Result;
                    callbacks.Enqueue(() => {
                        Texture2D tex = new Texture2D(2, 2); //size doesnt matter, it gets changed
                        tex.LoadImage(fileContents);
                        config.AugmentedImageDatabase.AddImage(obj.gameObject.name, new AugmentedImageSrc(tex), 1f);
                    });
                }
            });
        }

这里是有问题的错误

System.AggregateException: One or more errors occurred. ---> Firebase.Storage.StorageException: Not Found.  Could not get object  Http Code: 404

我已经检查了我所引用的所有路径,并且它们都没有错字且名称正确。 Firebase中的规则设置为public

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

所以这些应该不会给我带来问题。由于某种原因,即使该路径与Firebase中显示的路径相同,该应用也无法找到我要引用的图像实例。有谁知道为什么我不能下载我的图像?我在某处引用路径错误吗?

c# firebase unity3d firebase-storage
1个回答
0
投票

当您请求的对象在存储桶中不存在时,将发生此错误。它与您的安全规则无关。

我们无法确切看到您要访问的内容,因为您有隐藏在变量后面的信息,我们看不到:

storageRef.Child("ImageTargets/" + obj.gameObject.name + ".jpg");

您必须确保所传递名称的对象确实存在于存储桶中。无论您现在通过的是什么,它都不在那里。

© www.soinside.com 2019 - 2024. All rights reserved.