【问题标题】:How to delete picture from Firebase Storage如何从 Firebase 存储中删除图片
【发布时间】:2019-09-02 11:35:39
【问题描述】:

我有一个应用程序,它有很多用户,他们都存储在实时数据库中。我正在尝试通过单击按钮删除所有数据的用户,但删除后个人资料图片仍留在 Firebase 存储中。因此,当我尝试从 Firebase Storage 以及用户中删除图片时,我会收到此错误。 用户无权访问此对象。

所以我尝试在 ValueEventListener 方法中删除图片,因为我可以轻松地从我的实时数据库中获取 ImageURL。

实时数据库

在数据库中我有属性 profileimage: GeneratedPictureUrlWhenUploadingToStorage 我在 Firebase 存储中的图片也被命名为 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用户图片

【问题讨论】:

  • "使用android-studio 回答有关使用Android Studio 的问题。不要使用一般的Android 编程问题;而是使用android 标签。"

标签: java android firebase firebase-storage


【解决方案1】:

如果您收到权限错误,可能是存储规则阻止了您的访问。

也尝试使用您的文件名逻辑删除文件。 喜欢:


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

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2019-12-15
    • 2020-10-22
    相关资源
    最近更新 更多