我一直在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中显示的路径相同,该应用也无法找到我要引用的图像实例。有谁知道为什么我不能下载我的图像?我在某处引用路径错误吗?
当您请求的对象在存储桶中不存在时,将发生此错误。它与您的安全规则无关。
我们无法确切看到您要访问的内容,因为您有隐藏在变量后面的信息,我们看不到:
storageRef.Child("ImageTargets/" + obj.gameObject.name + ".jpg");
您必须确保所传递名称的对象确实存在于存储桶中。无论您现在通过的是什么,它都不在那里。