I'm new to both Flutter and Firebase, so bear with me on this one.
I am trying to delete a File in my Firebase Storage using the file Url.
I have the full Url of the file and remove all characters excluding the file path.
Then I try to delete the file. From following other answers on here I use the command;
FirebaseStorage.instance.ref().child(filePath).delete()
Below is my code;
static void deleteFireBaseStorageItem(String fileUrl){
String filePath = 'https://firebasestorage.googleapis.com/v0/b/dial-i-2345.appspot.com/o/default_images%2Fuser.png?alt=media&token=c2ccceec-8d24-42fe-b5c0-c987733ac8ae'
.replaceAll(new
RegExp(r'https://firebasestorage.googleapis.com/v0/b/dial-in-2345.appspot.com/o/'), '');
FirebaseStorage.instance.ref().child(filePath).delete().then((_) => print('Successfully deleted $filePath storage item' ));
}
The problem is the file never gets deleted.
I think I have tracked down where the problem is.
In the .delete()
method there is a required 'app' and 'storageBucket' value.
When I run this function the values are null.
I find this confusing because in the same file i see this;
/// The [FirebaseApp] instance to which this [FirebaseStorage] belongs.
///
/// If null, the default [FirebaseApp] is used.
final FirebaseApp app;
/// The Google Cloud Storage bucket to which this [FirebaseStorage] belongs.
///
/// If null, the storage bucket of the specified [FirebaseApp] is used.
final String storageBucket;enter code here
From the documentation I can see maybe I need to use the 'Firebase core' plugin to make the app which links the bucket to that database. But there is not much specific to Dart & flutter.
Does anyone have any experience with this?
Found Temporary solution
So there is not a method to convert the Url to a storage reference at the moment. Hopefully it will come out in a Firebase update.
Here was my hack
static void deleteFireBaseStorageItem(String fileUrl){
String filePath = fileUrl
.replaceAll(new
RegExp(r'https://firebasestorage.googleapis.com/v0/b/dial-in-2345.appspot.com/o/'), '');
filePath = filePath.replaceAll(new RegExp(r'%2F'), '/');
filePath = filePath.replaceAll(new RegExp(r'(?alt).*'), '');
StorageReference storageReferance = FirebaseStorage.instance.ref();
storageReferance.child(filePath).delete().then((_) => print('Successfully deleted $filePath storage item' ));
}
I know.... i know....
Ps 'dial-in-2345.appspot.com' is relevant to my app and you would need to change it.
See Question&Answers more detail:
os