请求图像时 FirebaseStorage 返回未知错误

FirebaseStorage returning unknown error when requesting image

我正在尝试提取已添加到 Android 设备上的 firebase 存储中的图像。每次运行时,我都会从 onFailureListener()

得到这个错误

E/StorageException(9646): An unknown error occurred, please check the HTTP result code and inner exception for server response. E/StorageException(9646): Code: -13000 HttpResult: 0

我还暂时将存储权限更改为 read/write,以确保这不是问题所在。

final ImageView test = (ImageView) findViewById(R.id.test_image);
StorageReference ref = storage.getReferenceFromUrl("gs://my-project.appspot.com/test_image.png");
    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            Log.d(TAG, "Successfully loaded uri");
            test.setImageURI(uri);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d(TAG, "Failed loaded uri: " + e.getMessage());
        }
    });

我刚刚注意到 httpresult 为零。这表明从未提出下载 url 的请求。如果您的 phone 上的播放服务未更新,可能会发生这种情况。你会知道这是错误,因为 adb logcat 会显示一个错误,结果是 "Storage network layer could not be loaded".

要解决此问题,请更新 phone 上的播放服务。有几种方法可以做到这一点。我发现最简单的方法是安装应用程序 "play services info" 以查看 Play 商店中的播放服务,然后点击更新(如果可用)。

我遇到了同样的问题,解决方法是:

  • 创建存储引用-->
StorageReference storageRef = storage.getReferenceFromUrl("gs:<bucket address>");
  • 为存储引用创建一个子项

StorageReference spaceRef = storageRef.child("child name");

您需要最新的 google 播放服务才能避免这种情况。

此外,在 firebase 控制台中启用匿名身份验证。

更新 Google Play 服务 在您的设备上 ,而不是在您的 gradle 脚本中(尽管也这样做)。

由于只浏览了 benjamin-wulfe 的答案以及网上其他人的答案,我在墙上撞了大约一个小时后,我回来仔细阅读了。希望这会帮助其他人避免我的错误!

我在使用 快速入门 Firebase 存储示例时遇到了同样的问题。问题是该应用程序未请求在 Android M 上存储的运行时权限。

所以,尝试检查存储权限。

在我的例子中,我是从 下载 URL 创建 StorageRef 而不是 Storage Location.

String storageLocation="gs://bbeplayer.appspot.com/heart.png";
    String downloadURL="https://firebasestorage.googleapis.com/v0/b/bbeplayer.appspot.com/o/heart.png?alt=media&token=41a22961-daf1-433e-a580-e65144d34ab3";
    StorageReference reference;
reference=FirebaseStorage.getInstance().getReferenceFromUrl(downloadURL);

所以我改了reference=FirebaseStorage.getInstance().getReferenceFromUrl(downloadURL);

reference=FirebaseStorage.getInstance().getReferenceFromUrl(storageLocation);

您需要上传另一个更大 KB 的文件,这对我有用!

我知道为时已晚但对我来说 none 上述方法有效,唯一的解决方法是将云存储 Android 库的依赖项更新到最新版本 19.1.0。

Firebase助手添加的依赖是旧的

我最近遇到了这个问题,我的是因为Firebase Storage中的权限我不允许在规则中读、写,所以我将它们更改为 This Worked for me

我遇到这个问题是因为我为 FileDownloadTask while calling getFile()

提供了无效的系统文件路径

由于 downloadDirectory 无效

String fileName = "...";
final File localFile = new File(downloadDirectory, fileName);
FileDownloadTask downloadTask = FirebaseStorage.getInstance()
                                               .getReference()
                                               .child("myChild")
                                               .child(fileName)
                                               .getFile(localFile);

我也遇到了同样的错误,最终意识到我提供了错误的存储位置。更正我的代码后工作正常,所以你也可以试试这个:

Uint8List filename=(widget.imageData);
    ref=fb.FirebaseStorage.instance.ref().child("images}");

await ref.putData(widget.imageData).whenComplete(() async{
  await ref.getDownloadURL().then((value) {
    imgRef.add({
      "url":value,
      "name":cond.data()["name"],
      "postuser-id":cond.data()["uid"]
    });
  });