15

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

E/StorageException(9646):发生未知错误,请检查服务器响应的HTTP结果代码和内部异常。E/StorageException(9646):代码:-13000 HttpResult:0

我还暂时将存储权限更改为具有读/写权限,以确保这不是问题。

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());
        }
    });
4

11 回答 11

7

我刚刚注意到 httpresult 为零。这表明从未提出获取下载 url 的请求。发生这种情况的一种方法是,如果您的手机上没有更新播放服务。您会知道这是错误,因为 adb logcat 会显示错误,其效果是“无法加载存储网络层”。

要解决此问题,请更新手机上的播放服务。有几种方法可以做到这一点。我发现最简单的方法是安装应用程序“播放服务信息”以查看播放商店中的播放服务,然后在可用时点击更新。

于 2016-05-24T16:52:50.743 回答
4

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

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

于 2017-04-27T05:45:12.077 回答
3

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

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

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

于 2016-09-07T06:57:30.100 回答
1

您需要拥有最新的 google play 服务来避免这种情况。

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

于 2017-02-05T14:07:31.380 回答
1

我在使用Quick Start Firebase 存储示例时遇到了同样的问题。问题是该应用没有请求运行时权限以在 Android M 上进行存储。

因此,请尝试检查存储权限。

于 2017-04-27T17:44:02.003 回答
0

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

于 2020-08-15T12:58:48.120 回答
0

FileDownloadTask我遇到了这个问题,因为我在调用时提供了无效的系统文件路径getFile()

此处发出的问题是由于 downloadDirectory 无效

String fileName = "...";
final File localFile = new File(downloadDirectory, fileName);
FileDownloadTask downloadTask = FirebaseStorage.getInstance()
                                               .getReference()
                                               .child("myChild")
                                               .child(fileName)
                                               .getFile(localFile);
于 2020-10-30T18:58:11.557 回答
0

我知道为时已晚但对我来说,上述方法都不起作用,唯一的解决方法是将 Cloud Storage Android 库的依赖项更新到最新版本,即 19.1.0。

Firebase 助手添加的依赖项是旧的。

于 2020-01-05T13:05:45.033 回答
0

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

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"]
    });
  });
于 2021-04-28T12:10:16.353 回答
0

就我而言,我是从Download 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);
于 2017-06-14T06:40:11.123 回答
-1

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

于 2017-12-14T16:36:26.640 回答