【问题标题】:Aggregate Exception: Firebase Cannot Find Image Specified聚合异常:Firebase 找不到指定的图像
【发布时间】:2020-07-23 13:35:23
【问题描述】:

我一直在 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 中的规则设置为公开

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

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

编辑:添加图片来证明我的错误

【问题讨论】:

    标签: c# firebase unity3d firebase-storage


    【解决方案1】:

    当您请求的对象在您的存储桶中不存在时,就会发生该错误。这与您的安全规则无关。

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

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

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

    【讨论】:

    • 感谢您的回复,但我想我在问题中澄清了所有这些。我特地说了,我调试了它发送到存储引用的路径,是正确的。我发送的路径是 gs://avira-cc267.appspot.com/ImageTargets/ImageName.jpg。 Firebase 默认存储桶是 gs://avira-cc267.appspot.com,图像位于名为 ImageTargets 的文件夹中,我传递的每个图像的标题都是正确的。我的路径中没有双“/”或缺少“/”。尽管据我所知,引发 FileNotFound 的唯一原因是路径不正确或文件丢失,但这不是问题。
    • 好吧,我们无法真正看到这一切。我们看不到引用的路径(您需要记录它并将其复制到问题中,或者可能对其进行硬编码)。我们也看不到bucket中存在文件(需要截图证明)。
    • 如果您的图片名称是“ImageName.jpg”,如您所说,我看不到它。
    • 显然不是,那是占位符。我在这里是因为我已经尝试了一切,任何简单的解决方案都行不通。也不要在我的帖子中提到我的存储桶被命名为 aivra 而不是 avira 的事实,就像前面提到的那样,数据库是公共的,我不希望随机的人找到这篇文章并修改它,但我不在乎更多的。我只是需要帮助。
    • 如果我们看不到您请求的确切名称与存储桶中的名称相同,我们无能为力。 obj.gameObject.name 的值可能不是你所期望的,我们也看不到它是什么。你将不得不调试你的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多