StorageException:发生了一个未知的错误,请检查HTTP结果代码和服务器响应的内部异常

11 人关注

我使用Firebase Storage来 upfile 。但它并不工作 这是我的代码。

FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("gs://the-food-house.appspot.com/");
// Create a reference to "file"
    StorageReference mStorage = storageRef.child("Album Avatar")
            .child(UserUID)
            .child(AvatarUser.getLastPathSegment());
    mStorage.putFile(AvatarUser).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            Toast.makeText(SignUpWithEmail.this, "UPLOAD FILE OK", Toast.LENGTH_SHORT).show();
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d("ERROR", e.toString());
            Toast.makeText(SignUpWithEmail.this, "Failed", Toast.LENGTH_SHORT).show();

以下是我遇到的错误。

com.google.firebase.storage.StorageException: An unknown error occurred, please check the HTTP result code and inner exception for server response.

而这是错误的细节。

Unrecognized GLES max version string in extensions: ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 
E/UploadTask: could not locate file for uploading:https://firebasestorage.googleapis.com/v0/b/the-food-house.appspot.com/o/Avatar%20Default%2Fmale.png?alt=media&token=3f285cab-c32b-4f33-a909-5a85ef62d74d
E/StorageException: StorageException has occurred.
An unknown error occurred, please check the HTTP result code and inner exception for server response.
    Code: -13000 HttpResult: 0 
E/StorageException: No content provider: https://firebasestorage.googleapis.com/v0/b/the-food-house.appspot.com/o/Avatar%20Default%2Fmale.png?alt=media&token=3f285cab-c32b-4f33-a909-5a85ef62d74d
java.io.FileNotFoundException: No content provider: https://firebasestorage.googleapis.com/v0/b/the-food-house.appspot.com/o/Avatar%20Default%2Fmale.png?alt=media&token=3f285cab-c32b-4f33-a909-5a85ef62d74d
    at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1131)
    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:982)
    at android.content.ContentResolver.openInputStream(ContentResolver.java:702)
    at com.google.firebase.storage.UploadTask.<init>(Unknown Source)
    at com.google.firebase.storage.StorageReference.putFile(Unknown Source)
    at thedark.example.com.thefoodhouse.Activity.Authencation.SignUpWithEmail.submitAvatarStorage(SignUpWithEmail.java:111)
    at thedark.example.com.thefoodhouse.Activity.Authencation.SignUpWithEmail.access$1200(SignUpWithEmail.java:38)
    at thedark.example.com.thefoodhouse.Activity.Authencation.SignUpWithEmail$5.onComplete(SignUpWithEmail.java:170)
    at com.google.android.gms.tasks.zzf.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

这是规则的火基。

allow read, write: if request.auth != null;

过去几天,它让我感到头疼。希望有人能找到问题所在。请帮助我。谢谢你。

android
firebase
firebase-storage
FPoly HCM - K123v2 Le Xuan Du
FPoly HCM - K123v2 Le Xuan Du
发布于 2017-12-29
18 个回答
bastami82
bastami82
发布于 2022-05-30
已采纳
0 人赞同

This Sorted me out 我所需要做的就是更新Firebase-storage库。 在我的例子中,它是 'com.google.firebase:firebase-storage:16.4.0' ,在更新为 'com.google.firebase:firebase-storage:17.0.0' 后,一切又开始正常工作。

愿上帝保佑你
我怎样才能做到呢?
Softgenies
Softgenies
发布于 2022-05-30
0 人赞同

更新你的Firebase-storage依赖性

implementation 'com.google.firebase:firebase-storage:17.0.0'
    
Vishal Kumar
Vishal Kumar
发布于 2022-05-30
0 人赞同

这个错误是由于在存储的规则标签下定义的规则产生的。 通过deafult,这些规则将被 -- 【替换代码0 【替换代码1 [替换代码2 【替换代码3 【替换代码4 【替换代码5 【替换代码5

如果你没有植入认证和ttying来存储文件,那么就植入认证,或者如果你是为了学习而实施,就把它删除。 不要在生产应用中使用这种方法 .

rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write if true;

谢谢,在新项目中,我的默认写法是 "write if false",它应该是 "write if request.auth != null",所以只有经过认证的用户才能写。我花了几个小时来调试,因为以前在新项目上,默认规则总是 "write if request.auth != null;",现在看来,默认规则是false。
Doug Stevenson
Doug Stevenson
发布于 2022-05-30
0 人赞同

你不能将 putFile() 与HTTP类型 Uri 一起使用。根据文档,你应该用它来 上传一个本地文件 .

如果你想上传一个由HTTP URL 引用的存在于其他地方的文件到Storage,你将不得不先下载该文件,将其存储在本地,然后再上传。

谢谢你。我是否会保存到应用程序的抽屉里?
Dumitru
Dumitru
发布于 2022-05-30
0 人赞同

所以我也有同样的问题,而且我很容易就解决了!,所以这不是Firebase的问题,但问题是,你的 文件不能从你的本地磁盘中访问!

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

对于api 21+,出于安全考虑,你需要申请许可,请查看这篇文章以了解更多信息。 如何申请存储许可

Oush
Oush
发布于 2022-05-30
0 人赞同

Using putStream() 是大多数文件的推荐方式,而不是像这样 putFile() (用于设备上的本地文件)。

InputStream stream = new FileInputStream(new File(pathToYourFile)));
UploadTask uploadTask = imageFileStorageReference.putStream(stream);
    
Steve Moretz
Steve Moretz
发布于 2022-05-30
0 人赞同

在我的情况下,我不得不粘贴下面的规则,并在我的存储上发布。

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true;
    
Alex Mamo
Alex Mamo
发布于 2022-05-30
0 人赞同

解决这个问题的关键是在应用程序的权限中启用存储。你应该遵循这些步骤。

Settings -> Apps -> AppName -> Permissions -> Enable Storage

记住,该文件应该存在于设备上。

AurumTechie
AurumTechie
发布于 2022-05-30
0 人赞同

确保你已经连接到了firebase。打开firebase助手,进入存储区,点击上传,从存储区下载一个文件并检查。连接很简单。只要点击连接按钮就可以了。

abdul basit
abdul basit
发布于 2022-05-30
0 人赞同

添加正确的依赖性。

implementation 'com.google.firebase:firebase-auth:17.0.0'
implementation 'com.google.firebase:firebase-storage:17.0.0'
implementation 'com.google.firebase:firebase-database:17.0.0'
    
Rohit S
Rohit S
发布于 2022-05-30
0 人赞同

在我的情况下,我已经超过了每天1GB的下载配额。当我第二天尝试时,我可以下载,没有任何问题。

Ali Raza
Ali Raza
发布于 2022-05-30
0 人赞同

可能这是一个错误的路径错误,但在我的案例中,解决这个问题的例子如下

i use this code then i received error

public static StorageReference getChildProfileStorage(String vid){
    StorageReference storageReference= FirebaseStorage.getInstance().getReference();
    storageReference.child("ParentDataStore").child(CurrentUser.getInstance().getEmail())
            .child("ChildDataStore").child(vid);
    return storageReference;

这里是解决我问题的一行

public static StorageReference getStudentProfileStorage(String vid){
    StorageReference storageReference= FirebaseStorage.getInstance().getReference("ParentDataStore")
            .child("StudentDataStore").child(vid).child("profile");
    return storageReference;
    
Zain
Zain
发布于 2022-05-30
0 人赞同

对我来说,这个错误是在上传0.0KB的图像文件时触发的;这是因为我正在测试图像压缩算法,该算法有一个错误,在某些情况下会导致0.0KB的图像。

因此,请确保你上传的图像/文件大于0KB。

Jonilan Hatad
Jonilan Hatad
发布于 2022-05-30
0 人赞同

对我来说,如果上传的文件没有 + @ # $ 这样的符号,它就能正常工作,确保文件名只有数字、字母、句点和下划线。

Zain
Zain
发布于 2022-05-30
0 人赞同

发生了一个未知的错误,请检查HTTP结果代码和服务器响应的内部异常。

当我试图从Firebase存储中下载一个文件时,我又遇到了这个问题。 .getFile() 方法,原因是我在这么做之前没有授予应用程序 WRITE_EXTERNAL_STORAGE 的权限。

File dir = new File(Environment.getExternalStorageDirectory(), "subDir");
File file = new File(dir, "fileName");
firebaseStorage.getReference().child("someDirectory").child("fileName").getFile(file);
    
Sahil Rajpal
Sahil Rajpal
发布于 2022-05-30
0 人赞同

对我来说,在menifest文件的应用标签中添加 android:requestLegacyExternalStorage="true" 就解决了这个错误。 但这个错误可能有各种原因,因为它没有指出原因。但是可以做一些事情。首先在gradle文件中更新firebase的存储库到最新版本。第二,检查安卓设置中的权限

Gilad Levinson
Gilad Levinson
发布于 2022-05-30
0 人赞同

我有类似的东西(不一样),最终启用了写外部权限,解决了我的问题。注意 - 它需要特殊的权限(向用户询问,而不仅仅是安装权限 - 在安卓6开始)。

dr.ibrahim
dr.ibrahim
发布于 2022-05-30
0 人赞同

更新BOM。 用这个解决了我的问题。 学习最新版本的BOM。 https://firebase.google.com/docs/android/setup

dependencies {
    .....
    implementation platform('com.google.firebase:firebase-bom:30.1.0')
    implementation 'com.google.firebase:firebase-analytics'