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

时间:2016-05-23 16:35:17

标签: android firebase firebase-storage

我正在尝试将我添加到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());
        }
    });

11 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

  • 创建存储参考 - &gt;
StorageReference storageRef = storage.getReferenceFromUrl("gs:<bucket address>");
  • 为存储参考创建子项
  

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

答案 3 :(得分:1)

您需要拥有最新的Google Play服务才能避免这种情况。

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

就我而言,我是从下载网址创建StorageRef而不是存储位置

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);

答案 6 :(得分:0)

我知道为时已晚,但是对我而言,上述所有方法均无效,唯一的解决方法是将Cloud Storage Android库的依赖关系更新为最新版本19.1.0。

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

答案 7 :(得分:0)

我最近遇到了这个问题,而我的原因是由于 Firebase Storage 中的权限,我不允许阅读,编写规则,因此我将它们更改为This Worked for me

答案 8 :(得分:0)

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

在这里,由于downloadDirectory无效而引发了发布

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

答案 9 :(得分: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"]
    });
  });

答案 10 :(得分:-1)

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