当用户按下按钮时,我想在 firebase 中上传带有一些文本的多张图片。为此,我实现了 for 循环。假设如果用户选择了 3 张照片,那么我认为 firebase 应该是这样的
"Post": {
"uid": {
"Text": "some text",
"imageUrl": "url",
"imageUrl2": "url2",
"imageUrl3": "url3"
}
}
但是它返回是这样的。 tweetImageUrl 是最后选择的第三张照片的 url。同样在存储中,只有一张照片,也是第三张照片。
如何正确上传图片? 这是我的代码。
func sendTweets() {
let text = textView.text
let tweetLength = textView.text.count
let imagesNumber = imagesArray.count
format.dateFormat = "yyyy-MM-dd HH:mm"
let strDate = format.string(from: date as Date)
let childRef = ref.child("TWEETS").child(uid!).childByAutoId()
let key = ref.child("TWEETS").child(uid!).childByAutoId().key
let childStorageRef = storageRef.child("tweetImage").child(uid!).child(key)
if(tweetLength>0 && imagesNumber>0)
{
for image in imagesArray {
let tweetImage = image
if let uploadData = UIImagePNGRepresentation(tweetImage) {
childStorageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil {
print("error")
} else {
if let imageUrl = metadata?.downloadURL()?.absoluteString {
let values = ["Text": text!, "tweetImageUrl": imageUrl, "Date": strDate] as [String : Any]
childRef.updateChildValues(values)
}
}
})
}
}
dismiss(animated: true, completion: nil)
}
else if(tweetLength>0)
{
let values = ["Text": text!, "Date": strDate] as [String : Any]
childRef.updateChildValues(values)
dismiss(animated: true, completion: nil)
}
else if(imagesNumber>0)
{
for image in imagesArray {
let tweetImage = image
if let uploadData = UIImagePNGRepresentation(tweetImage) {
childStorageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil {
print("error")
} else {
if let imageUrl = metadata?.downloadURL()?.absoluteString {
let values = ["tweetImageUrl": imageUrl, "Date": strDate] as [String : Any]
childRef.updateChildValues(values)
}
}
})
}
}
dismiss(animated: true, completion: nil)
} else {
alertTheUser(title: "error", message: "enter something.")
}
}//func
此外,当涉及到检索这些图像并在上传后显示在 Collection View 中时,这是实现该目标的正确方法吗? 提前致谢!
最佳答案
我认为这不是您在使用 firebase 时应遵循的正确数据库结构。 如果您像这样存储图像,比如 imageurl1、imageurl2...等。在不知道这些值的 key 的情况下获取这些值真的很困难。 我建议你遵循这样的结构
"Post": {
"uid": {
"Text": "some text",
"images": {
autoID1: url1,
autoID2: url2
}
}
}
所以很容易获取这些 URL
您可以使用
附加 URLlet postRef = Database.database().reference(withPath: "Post").child(uid).child("images")
let autoID = postRef.childByAutoID().key
postRef.child(autoID).setValue(url)
关于ios - Firebase 快速上传多张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47690247/