我无法通过'getreferencefromUrl'或访问存储子项来删除图像,因为我在faillistener上收到错误
用户无权访问此对象。
我尝试修复存储,并尝试了其他方法来访问要删除的文件,但是它不起作用。
我当前正在使用:
StorageReference photoRef = mFirebaseStorage.getReferenceFromUrl(mImageUrl);
photoRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: deleted file");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: did not delete file: " e.getmessage());
}
});
我的存储规则如下:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null && request.resource.size < 500 * 1024;
}
}
}
即使我使用的是下载网址或路径网址,图片也不会被删除。
答案 0 :(得分:0)
这是因为删除项目时,请求中将没有资源项目,因此条件将失败。
您应该按照以下说明微调写作过程
match /{allPaths=**} {
allow write: if request.auth != null && request.resource.size < 500 * 1024;
allow delete: if request.auth != null;
allow read: if request.auth != null && request.resource.size < 500 * 1024;
}
或者您可以使用
一行完成match /{allPaths=**} {
allow write,read: if request.auth.uid != null &&
(request.resource.size < 500 * 1024 || request.method == 'delete');
}
此外,您应该使用Firebase规则模拟器来测试您的规则