请求图像时 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"]
});
});
我正在尝试提取已添加到 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"]
});
});