【发布时间】:2023-03-23 16:14:01
【问题描述】:
我有以下代码:
@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。问题是我同时上传了这些图片。我正在尝试创建一个应用程序,您可以在其中发布图像然后查看它们。但是,如果我将多张图片一起上传,它们会被存储为完全独立的图片。我想要的是如果用户上传他们存储在一起的一组图像,这样我就可以将它们作为一个帖子检索。我的问题是我该怎么做?
编辑
我已将代码更改为:
@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 下,而是存储在帖子子项下。这是它的外观图片:
【问题讨论】:
标签: swift database firebase firebase-realtime-database