java - 将文件上传到 Android 的 Firebase 存储中的用户特定目录?
问题描述
我正在尝试使用 Android 中的 Firebase 存储上传文件。但我收到以下异常:
E/StorageException: StorageException has occurred.
User does not have permission to access this object.
Code: -13021 HttpResult: 403
E/StorageException: The server has terminated the upload session
java.io.IOException: The server has terminated the upload session
at com.google.firebase.storage.UploadTask.zzs(Unknown Source)
at com.google.firebase.storage.UploadTask.zzr(Unknown Source)
at com.google.firebase.storage.UploadTask.run(Unknown Source)
at com.google.firebase.storage.StorageTask.zzl(Unknown Source)
at com.google.firebase.storage.zzx.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.io.IOException: { "error": { "code": 403, "message": "Permission denied. Could not perform this operation" }}
at bft.a(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):147)
at bft.a(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):119)
at bfn.a(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):5)
at nd.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):12)
at android.os.Binder.transact(Binder.java:499)
at com.google.android.gms.internal.firebase_storage.zza.transactAndReadExceptionReturnVoid(Unknown Source)
at com.google.android.gms.internal.firebase_storage.zzm.zze(Unknown Source)
at com.google.android.gms.internal.firebase_storage.zzq.zza(Unknown Source)
at com.google.android.gms.internal.firebase_storage.zzf.zza(Unknown Source)
at com.google.firebase.storage.UploadTask.zzc(Unknown Source)
at com.google.firebase.storage.UploadTask.run(Unknown Source)
at com.google.firebase.storage.StorageTask.zzl(Unknown Source)
at com.google.firebase.storage.zzx.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
E/StorageException: StorageException has occurred.
User does not have permission to access this object.
Code: -13021 HttpResult: 403
E/StorageException: The server has terminated the upload session
java.io.IOException: The server has terminated the upload session
at com.google.firebase.storage.UploadTask.zzs(Unknown Source)
at com.google.firebase.storage.UploadTask.zzr(Unknown Source)
at com.google.firebase.storage.UploadTask.run(Unknown Source)
at com.google.firebase.storage.StorageTask.zzl(Unknown Source)
at com.google.firebase.storage.zzx.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.io.IOException: { "error": { "code": 403, "message": "Permission denied. Could not perform this operation" }}
at bft.a(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):147)
at bft.a(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):119)
at bfn.a(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):5)
at nd.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@12874022@12.8.74 (040308-204998136):12)
at android.os.Binder.transact(Binder.java:499)
at com.google.android.gms.internal.firebase_storage.zza.transactAndReadExceptionReturnVoid(Unknown Source)
at com.google.android.gms.internal.firebase_storage.zzm.zze(Unknown Source)
at com.google.android.gms.internal.firebase_storage.zzq.zza(Unknown Source)
at com.google.android.gms.internal.firebase_storage.zzf.zza(Unknown Source)
at com.google.firebase.storage.UploadTask.zzc(Unknown Source)
at com.google.firebase.storage.UploadTask.run(Unknown Source)
at com.google.firebase.storage.StorageTask.zzl(Unknown Source)
at com.google.firebase.storage.zzx.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
我的 Java 代码:
File f= new File(filePath.getPath());
mStorageRef = FirebaseStorage.getInstance().getReference();
StorageReference userReference = mStorageRef.child(mAuth.getUid());
StorageReference fileReference = userReference.child(f.getName());
fileReference.putFile(filePath)
我在 Firebase 中的安全规则:
service firebase.storage {
match /b/{bucket}/o {
match /{userId} {
allow read,write: if request.auth.uid==userId;
}
}
}
解决方案
当我将安全规则更改为:
service firebase.storage {
match /b/{bucket}/o {
match /{userId} {
match /{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
}
推荐阅读
- python - 将 dm 发送给用户 discord.py 时出错
- javascript - 为什么这是一个无效的日期?
- bing - Bing Ads 刷新令牌 - 不会自动刷新
- spring-el - 在自定义注释中使用拼写时,inteliJ idea 不自动提示方法
- python - 在循环内并行化循环时,有没有办法解决“比较递归深度范围”?
- java - 由于 java.lang.NoClassDefFoundError: jdk/internal/reflect/GeneratedSerializationConstructorAccessor1 无法运行 gradle 测试任务
- docker - Docker Moodle localhost 不工作(CentOS)
- python - 用 ursina 进行左 clic 检测
- c# - 启用了可为空引用类型的 C# 事件 - 如何声明?
- excel - VBA - 根据特定顺序重命名工作表