我有以下代码:
@IBAction func postFinalButton(_ sender: Any) {
while index < ImagesOnClick.count {
ProgressHUD.show()
ProgressHUD.animationType = .circleRotateChase
ProgressHUD.colorAnimation = #colorLiteral(red: 0.337254902, green: 0.6156862745, blue: 0.9803921569, alpha: 1)
ProgressHUD.colorHUD = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
guard let imageSelected = ImagesOnClick[index] else {
print("Image is nil")
return
}
index += 1
guard let imageData = imageSelected.jpegData(compressionQuality: 0.4) else {
print("This is nil")
return
}
let storageRef = Storage.storage().reference(forURL: "gs://loginpage-227bd.appspot.com")
let storageRefPosts = storageRef.child("posts").child(Auth.auth().currentUser!.uid)
let metadata = StorageMetadata()
metadata.contentType = "image/jpg"
storageRefPosts.putData(imageData, metadata: metadata, completion: {
(storageMetaData, error) in
if error != nil {
print("error")
return
}
print("blala")
storageRefPosts.downloadURL(completion: { (url, error) in
if let metaImageUrl = url?.absoluteString {
print(metaImageUrl)
self.sendDataToDatabase(photoUrl: metaImageUrl)
//self.performSegue(withIdentifier: "BackToHome", sender: self)
}
})
})
}
}
func sendDataToDatabase(photoUrl: String) {
let ref = Database.database().reference()
let postsRefrence = ref.child("posts")
let newPostId = postsRefrence.childByAutoId().key
let newPostsRefrence = postsRefrence.child(newPostId!)
newPostsRefrence.setValue(["photoUrl": photoUrl], withCompletionBlock: {
(error, ref) in
if error != nil {
ProgressHUD.showError(error?.localizedDescription)
return
}
ProgressHUD.showSucceed()
})
}
我的模型看起来像这样:
如果您查看数据库,您将看到 4 张不同的图像,每张图像都有一个单独的 ID。问题是我同时上传了这些图像。我正在尝试创建一个应用程序,您可以在其中发布图像然后查看它们。但是,如果我一起上传多个图像,它们将存储为完全独立的图像。我想要的是,如果用户上传一组图像,它们存储在一起,这样我就可以将它们作为一篇文章检索。我的问题是我该怎么做?
Edit
我已将代码更改为:
@IBAction func postFinalButton(_ sender: Any) {
let ref = Database.database().reference()
let postsReference = ref.child("posts")
let newImagesRef = postsReference.childByAutoId()
while index < ImagesOnClick.count {
ProgressHUD.show()
ProgressHUD.animationType = .circleRotateChase
ProgressHUD.colorAnimation = #colorLiteral(red: 0.337254902, green: 0.6156862745, blue: 0.9803921569, alpha: 1)
ProgressHUD.colorHUD = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
guard let imageSelected = ImagesOnClick[index] else {
print("Image is nil")
return
}
index += 1
guard let imageData = imageSelected.jpegData(compressionQuality: 0.4) else {
print("This is nil")
return
}
let storageRef = Storage.storage().reference(forURL: "gs://loginpage-227bd.appspot.com")
let storageRefPosts = storageRef.child("posts").child(Auth.auth().currentUser!.uid)
let metadata = StorageMetadata()
metadata.contentType = "image/jpg"
storageRefPosts.putData(imageData, metadata: metadata, completion: {
(storageMetaData, error) in
if error != nil {
print("error")
return
}
print("blala")
storageRefPosts.downloadURL(completion: { (url, error) in
if let metaImageUrl = url?.absoluteString {
print(metaImageUrl)
self.sendDataToDatabase(photoUrl: metaImageUrl, ref: postsReference, index: self.index)
//self.performSegue(withIdentifier: "BackToHome", sender: self)
}
})
})
}
}
func sendDataToDatabase(photoUrl: String, ref: DatabaseReference, index: Int) {
let name = "photoUrl"+String(index)
ref.setValue([name: photoUrl], withCompletionBlock: {
(error, ref) in
if error != nil {
ProgressHUD.showError(error?.localizedDescription)
return
}
ProgressHUD.showSucceed()
})
}
但现在,当我按下帖子按钮时,仅保存最后选定的图像 url,而不是将每个帖子存储在新的 id 下,而是将其存储在 posts 子项下。这是它的外观图像: