简体   繁体   English

如何从Firebase存储中删除图片

[英]How to delete picture from Firebase Storage

I have an app, that has many users they are all stored in Realtime Database. 我有一个应用程序,它有许多用户,它们都存储在实时数据库中。 I'm trying to delete user on button click with all the data, but the profile pictures are still left in Firebase Storage after deletion. 我正在尝试删除用户点击按钮并显示所有数据,但删除后仍会将配置文件图片保留在Firebase存储中。 So when I try to delete the picture from Firebase Storage aswell as users I get this error. 因此,当我尝试从Firebase Storage以及用户中删除图片时,我收到此错误。 User does not have permission to access this object. 用户无权访问此对象。

So I'm trying to delete picture in the ValueEventListener method, because I can easily get the ImageURL from my Realtime Database. 所以我试图删除ValueEventListener方法中的图片,因为我可以轻松地从我的实时数据库中获取ImageURL。

Realtime Database 实时数据库

In DB I have attribute profileimage: GeneratedPictureUrlWhenUploadingToStorage Also my pictures in Firebase Storage are named currentUserId + ".JPG" so its like an indetifer 在DB我有属性profileimage:GeneratedPictureUrlWhenUploadingToStorage我在Firebase存储中的图片也被命名为currentUserId +“.JPG”所以它就像一个独立的

Storage Rules: 存储规则:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Code: 码:

    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();

When I press the buttonDeleteAccount I want to delete Storaged pictures of uniqe User 当我按下DeleteDeteteAccount时,我想删除uniqe User的存储图片

If you are getting an error with permission, maybe the storage rules is blocking your access. 如果您在获得权限时收到错误,则存储规则可能阻止您访问。

Also try to delete the file using your file name logic. 还尝试使用文件名逻辑删除文件。 Like: 喜欢:


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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM