Reputation: 569
I have a firebase storage path that looks like this.
firebase.storage().ref('temp/test')
the "test" folder has about 25-50 files. I know there is not a way to delete the whole directory in firebase but Is there a way to iterate through all the files in a directory and deleting them one by one?
Upvotes: 5
Views: 3929
Reputation: 11
I did it this way in my Angular app (tree-shakable calls / modular api):
import {
Storage, ref, getStorage, listAll, deleteObject, getBytes
} from '@angular/fire/storage';
...
async deleteDirectory(directoryPath: string) {
const storage = getStorage();
const listRef = ref(storage, directoryPath);
await this.deleteFiles(listRef);
}
async deleteFiles(listRef: any) {
await listAll(listRef)
.then((res) => {
res.prefixes.forEach((folderRef) => {
// if list item is a directory, recursively move through directory tree
this.deleteFiles(folderRef);
});
res.items.forEach((itemRef) => {
// if not a directory or empty, delete object
deleteObject(itemRef);
});
}).catch((error) => {
console.log('error deleting storage objects: ', error);
});
}
Upvotes: 0
Reputation: 83093
Is there a way to iterate through all the files in a directory and deleting them one by one?
Yes, you can use the listAll()
method, as follows:
const storageRef = firebase.storage().ref('temp');
storageRef.listAll().then((listResults) => {
const promises = listResults.items.map((item) => {
return item.delete();
});
Promise.all(promises);
});
Note that:
rules_version = '2';
at the top of the Security Rules).list()
repeatedly until there are no more results. The default pagination size is 1000.Upvotes: 9