FirebaseStorage:如何删除目录

当我试图删除一个目录时,FirebaseStorage总是返回错误400 ,例如下面的东西总是返回错误400

 let storageRef = FIRStorage.storage().reference().child("path/to/directory") storageRef.deleteWithCompletion { (error) in print("error: \(error)") // always prints error code 400 } 

但是,删除文件可以正常工作,例如,不会返回错误:

 let storageRef = FIRStorage.storage().reference().child("path/to/file.jpg") storageRef.deleteWithCompletion { (error) in print("error: \(error)") // works fine, error is nil } 

我在这里做错了什么? 我不认为它不被FirebaseStorage支持,因为从一个目录逐个删除文件将是非常跛脚的(特别是如果所述目录有这些的100个或1000个)。

从谷歌组,删除一个目录是不可能的。 您必须在某处(在Firebase数据库中)维护一个文件列表,然后逐个删除它们。

https://groups.google.com/forum/#!topic/firebase-talk/aG7GSR7kVtw

我也提交了function请求,但由于他们的错误跟踪器是不公开的,没有我可以分享的链接。

在2017/5/5没有办法删除目录但是你可以使用我的algorithm

使用这个代码。

  this.sliders = this.db.list(`users/${this.USER_UID}/website/sliders`) as FirebaseListObservable<Slider[]> /** * Delete image from firebase storage is take a string path of the image * @param _image_path */ deleteImage(_image_path: string) { // 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); }); } 

如上所述,删除一个目录是无效的。 我正在分享一个查询Firebase数据库中的文件列表的例子,并逐个删除它们。 这是我的查询和电话。

  let messagePhotoQuery = messagesRef.child(group.key).child("messages").queryOrdered(byChild: "photoURL") deleteMessagePhotos(from: messagePhotoQuery) 

这是我的函数循环获取URL,然后删除该存储引用的文件。

  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! [String: AnyObject] if let photoURL = messageData["photoURL"] as? String { let photoStorageRef = FIRStorage.storage().reference(forURL: photoURL) photoStorageRef.delete(completion: { (error) in if let error = error { print(error) } else { // success print("deleted \(photoURL)") } }) } } }) }