我使用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;
这几天让我很头疼。希望有人发现问题。请帮帮我。谢谢。
答案 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 中开始)。