如何从Firebase存储中删除图片

时间:2019-04-11 18:37:51

标签: java android firebase firebase-storage

我有一个应用程序,其中有许多用户都存储在实时数据库中。我正在尝试删除所有数据的按钮单击用户,但是删除后,个人资料图片仍保留在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用户的存储图片

1 个答案:

答案 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
    }
});