我有一个应用程序,其中有许多用户都存储在实时数据库中。我正在尝试删除所有数据的按钮单击用户,但是删除后,个人资料图片仍保留在Firebase存储中。因此,当我尝试从Firebase Storage以及用户中删除图片时,出现此错误。 用户无权访问此对象。
因此,我试图删除ValueEventListener方法中的图片,因为我可以轻松地从实时数据库中获取ImageURL。
实时数据库
在数据库中,我具有属性profileimage:GeneratedPictureUrlWhenUploadingToStorage 另外,我在Firebase Storage中的图片被命名为currentUserId +“ .JPG”,因此它就像一个indetifer
存储规则:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
代码:
switch (view.getId()){
case R.id.buttonEditProfile:
startActivity(new Intent(this, ProfileEditActivity.class));
break;
case R.id.buttonUserList:
startActivity(new Intent(this, UserListActivity.class));
break;
case R.id.buttonDeleteAccount:
profileUserRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
StorageReference storageReference1;
String myImage = dataSnapshot.child("profileimage").getValue().toString();
storageReference1 = FirebaseStorage.getInstance().getReferenceFromUrl(myImage);
storageReference1.delete();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
DatabaseReference drFailure = FirebaseDatabase.getInstance().getReference("failures").child(currentUserId);
DatabaseReference drVehicles = FirebaseDatabase.getInstance().getReference("vehicles").child(currentUserId);
DatabaseReference drUsers = FirebaseDatabase.getInstance().getReference("users").child(currentUserId);
FirebaseUser userDel = FirebaseAuth.getInstance().getCurrentUser();
drFailure.removeValue();
drVehicles.removeValue();
drUsers.removeValue();
userDel.delete();
当我按下按钮DeleteAccount时,我要删除uniqe用户的存储图片
答案 0 :(得分:0)
如果权限错误,则可能是存储规则阻止了您的访问。
还尝试使用文件名逻辑删除文件。 喜欢:
StorageReference storageRef = storage.getReference();
StorageReference photoRef = storageRef.child("YOUR_PATH" + userId + ".jpg");
photoRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Success
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Error
}
});