FirebaseStorage renvoie toujours l'erreur 400
lorsque j'essaie de supprimer un directory, par exemple, quelque chose comme ce qui suit renvoie toujours l'erreur 400
.
let storageRef = FIRStorage.storage().reference().child("path/to/directory") storageRef.deleteWithCompletion { (error) in print("error: \(error)") // always prints error code 400 }
Cependant, la suppression d'un file fonctionne bien, par exemple quelque chose comme ne renvoie pas une erreur:
let storageRef = FIRStorage.storage().reference().child("path/to/file.jpg") storageRef.deleteWithCompletion { (error) in print("error: \(error)") // works fine, error is nil }
Que pourrais-je faire mal ici? Je ne pense pas que FirebaseStorage ne le supporte pas, car supprimer des files d'un directory un à un serait plutôt boiteux (surtout si le directory en question en a 100 ou 1000).
à partir de google group, la suppression d'un directory n'est pas possible. Vous devez maintenir une list de files quelque part (dans la database Firebase) et les supprimer un par un.
https://groups.google.com/forum/#!topic/firebase-talk/aG7GSR7kVtw
J'ai également soumis la request de fonctionnalité, mais comme leur outil de suivi des bogues n'est pas public, il n'y a pas de lien que je puisse partager.
En 26/5/2017 il n'y a aucun moyen de supprimer le directory Mais vous pouvez utiliser mon algorithm
Utilisez ce code.
this.sliders = this.db.list(`users/${this.USER_UID}/website/sliders`) as FirebaseListObservable<Slider[]> /** * Delete image from firebase storage is take a ssortingng path of the image * @param _image_path */ deleteImage(_image_path: ssortingng) { // first delete the image const storageRef = firebase.storage().ref(); const imageRef = storageRef.child(_image_path); imageRef.delete().then(function() { console.log('file deleted'); // File deleted successfully }).catch(function(error) { // Uh-oh, an error occurred! console.log(error); }); } /** * Deletes multiple Sliders, it takes an array of ids * @param ids */ deleteMutipleSliders(ids: any) { ids.forEach(id => { this.getSliderDetails(id).subscribe(slider => { let id = slider.$key; // i think this is not nesesery const imgPath = slider.path; this.deleteImage(imgPath); }); return this.sliders.remove(id); }); }
Comme indiqué ci-dessus, la suppression d'un directory n'est pas valide. Je partage un exemple d'interrogation d'une list de files dans la database Firebase et de leur suppression une par une. C'est ma requête et appel.
let messagePhotoQuery = messagesRef.child(group.key).child("messages").queryOrdered(byChild: "photoURL") deleteMessagePhotos(from: messagePhotoQuery)
C'est ma fonction en boucle en obtenant l'URL, puis en supprimant le file à cette reference de stockage.
func deleteMessagePhotos(from photoQuery: FIRDatabaseQuery) { photoQuery.observeSingleEvent(of: .value, with: { (messagesSnapshot) in guard messagesSnapshot.exists() else { return } print(messagesSnapshot) for message in messagesSnapshot.children { let messageSnapshot = message as! FIRDataSnapshot let messageData = messageSnapshot.value as! [Ssortingng: AnyObject] if let photoURL = messageData["photoURL"] as? Ssortingng { let photoStorageRef = FIRStorage.storage().reference(forURL: photoURL) photoStorageRef.delete(completion: { (error) in if let error = error { print(error) } else { // success print("deleted \(photoURL)") } }) } } }) }