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

时间:2017-12-29 15:42:47

标签: android firebase firebase-storage

我使用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)

这是规则firebase:

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

这几天让我很头疼。希望有人发现问题。请帮帮我。谢谢。

16 个答案:

答案 0 :(得分:1)

您不能将putFile()与HTTP类型Uri一起使用。根据文档,您应该将其用于upload a local file

如果要将文件上传到存在于HTTP URL引用的其他位置的存储,则必须先下载该文件,将其存储在本地,然后上传。

答案 1 :(得分:1)

这对我进行了排序,我要做的就是更新firebase-storage库。 以我为例,它是'com.google.firebase:firebase-storage:16.4.0',将其更新为'com.google.firebase:firebase-storage:17.0.0'后,一切又开始正常工作。

答案 2 :(得分:1)

更新您的firebase-storage依赖

implementation 'com.google.firebase:firebase-storage:17.0.0'

答案 3 :(得分:1)

因此,我遇到了同样的问题,我很容易解决了它!因此,firebase没问题,但是问题是您无法从本地磁盘访问您的文件! < / p>

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

对于api 21+,出于安全原因,您需要请求权限,请查看此文章以获取更多信息: How to request storage permission

答案 4 :(得分:1)

添加正确的依赖项:

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'

答案 5 :(得分:0)

我最近也面对过。解决方法如下:

只需转到您的firebase并设置以下规则:

allow read, write: if true;

希望对您有帮助。

答案 6 :(得分:0)

就我而言,我必须将规则粘贴到下面并发布到我的存储中。

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

答案 7 :(得分:0)

解决此问题的关键是在应用程序的权限中启用存储。您应该按照以下步骤操作:

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

请记住该文件应该在设备上。

答案 8 :(得分:0)

确保您已连接到Firebase。打开firebase助手,转到存储,单击上载,然后从存储下载文件并进行检查。连接很容易。只需单击“连接”按钮即可。

答案 9 :(得分:0)

这可能是错误的路径错误,但就我而言,这里是示例

我使用此代码,然后收到错误消息

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

答案 10 :(得分:0)

对于大多数文件,建议使用putStream(),而不是putFile()(对于设备上的本地文件),就像这样:

InputStream stream = new FileInputStream(new File(pathToYourFile)));

UploadTask uploadTask = imageFileStorageReference.putStream(stream);

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

此错误可能有多种原因,因为它没有指出原因。但是事情可以做。首先在gradle文件中将firebase的存储库更新为最新版本。 android设置中的第二次检查权限

答案 13 :(得分:0)

对我来说,如果上传文件没有符号 +@#$ 等,它可以正常工作,请确保文件名只有数字、字母、句号和下划线。

答案 14 :(得分:0)

<块引用>

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

当我尝试使用 .getFile() 方法从 Firebase Storage 下载文件时,我再次遇到此问题,原因是在此之前我没有授予应用 WRITE_EXTERNAL_STORAGE 权限。

File dir = new File(Environment.getExternalStorageDirectory(), "subDir");
File file = new File(dir, "fileName");

firebaseStorage.getReference().child("someDirectory").child("fileName").getFile(file);

答案 15 :(得分:0)

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