Ios Firebase存储在上载时不断替换图像
我试图一次上传2个图像,并获取下载URL以转到Firebase数据库,但第二个图像函数不断替换第一个图像函数,因此当我单击下载URL获取第一个或第二个图像时,它将仅获取第二个图像。这是我的密码Ios Firebase存储在上载时不断替换图像,ios,firebase,swift3,firebase-realtime-database,firebase-storage,Ios,Firebase,Swift3,Firebase Realtime Database,Firebase Storage,我试图一次上传2个图像,并获取下载URL以转到Firebase数据库,但第二个图像函数不断替换第一个图像函数,因此当我单击下载URL获取第一个或第二个图像时,它将仅获取第二个图像。这是我的密码 @IBAction func upload(_ sender: Any) { let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png") if let u
@IBAction func upload(_ sender: Any) {
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png")
if let uploadData = UIImagePNGRepresentation(self.myImageView1.image!){
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
let storageRef2 = Storage.storage().reference().child("images2/\(NSUUID().uuidString)/image2.png")
if let uploadData2 = UIImagePNGRepresentation(self.myImageView2.image!){
storageRef2.putData(uploadData2, metadata: nil, completion: { (metadata, error) in
if error != nil {
print("error")
return
} else {
let downloadURL = metadata?.downloadURL()?.absoluteString
let downloadURL2 = metadata?.downloadURL()?.absoluteString
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (downloadURL), "Download URL 2": (downloadURL2)])
}
当然,您的链接是相同的,您的downloadURL和downloadURL2引用的是相同的元数据?.downloadURL?.absoluteString。试试这个:
@IBAction func upload(_ sender: Any) {
checkExist(url: inserttheurlhere){ succes in
if succes{
//image exist
//continue your work here when the picture exist
}else{
//error downloading, not exist or other failure
//continue your work here when no exist
}
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png")
if let uploadData = UIImagePNGRepresentation(self.myImageView1.image!){
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
let storageRef2 = Storage.storage().reference().child("images2/\(NSUUID().uuidString)/image2.png")
if let uploadData2 = UIImagePNGRepresentation(self.myImageView2.image!){
storageRef2.putData(uploadData2, metadata: nil, completion: { (metadataSecond, error) in
if error != nil {
print("error")
return
} else {
let downloadURL = metadata?.downloadURL()?.absoluteString
let downloadURL2 = metadataSecond?.downloadURL()?.absoluteString
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (downloadURL), "Download URL 2": (downloadURL2)])
}
func checkExist(url: String, completionHandler:@escaping (Bool) -> ()){
let storageRef = Storage.storage().reference().child(url)
if let uploadData = UIImagePNGRepresentation(self.theuiview.image!){
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
if error == nil && metadata != nil{
completionHandler(true)
}else{
completionHandler(false)
}
})
}
当然,您的链接是相同的,您的downloadURL和downloadURL2引用的是相同的元数据?.downloadURL?.absoluteString。试试这个:
@IBAction func upload(_ sender: Any) {
checkExist(url: inserttheurlhere){ succes in
if succes{
//image exist
//continue your work here when the picture exist
}else{
//error downloading, not exist or other failure
//continue your work here when no exist
}
let storageRef = Storage.storage().reference().child("images/\(NSUUID().uuidString)/image.png")
if let uploadData = UIImagePNGRepresentation(self.myImageView1.image!){
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
let storageRef2 = Storage.storage().reference().child("images2/\(NSUUID().uuidString)/image2.png")
if let uploadData2 = UIImagePNGRepresentation(self.myImageView2.image!){
storageRef2.putData(uploadData2, metadata: nil, completion: { (metadataSecond, error) in
if error != nil {
print("error")
return
} else {
let downloadURL = metadata?.downloadURL()?.absoluteString
let downloadURL2 = metadataSecond?.downloadURL()?.absoluteString
self.ref?.child("Posts").childByAutoId().setValue(["Title": self.titleText.text, "Subtitle": self.subtitleText.text, "Article": self.articleText.text, "Author": self.authorText.text, "Date": self.dateText.text, "Tags": self.tagsText.text, "PostType": self.postType.text, "PostStyle": self.postStyle.text, "PostSize": self.postSize.text, "Download URL": (downloadURL), "Download URL 2": (downloadURL2)])
}
func checkExist(url: String, completionHandler:@escaping (Bool) -> ()){
let storageRef = Storage.storage().reference().child(url)
if let uploadData = UIImagePNGRepresentation(self.theuiview.image!){
storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in
if error == nil && metadata != nil{
completionHandler(true)
}else{
completionHandler(false)
}
})
}
如上所示,您只需要为每个图像包含不同的URL。 乙二醇 `//创建一个时间戳作为文件名 const filename=Math.floor(Date.now()/1000)
这里是文件名的原因,每次上传时文件名都会改变。试试这种方法。问题出在同一个URL中 如上所示,您只需要为每个图像包含不同的URL。 乙二醇 `//创建一个时间戳作为文件名 const filename=Math.floor(Date.now()/1000)
这里是文件名的原因,每次上传时文件名都会改变。试试这种方法。问题出在同一个URL中 成功了!另外,你知道如何只上传第二张图片(如果它在那里)而只上传第一张吗?谢谢你的帮助@Riccardo I更新了代码,您可以在其中输入checkExist函数将查找的任何url。如果数据存在且错误为零,则函数将完成'true'或'false',您可以在我说过的地方继续工作:)。请接受你问题的答案,它起作用了!另外,你知道如何只上传第二张图片(如果它在那里)而只上传第一张吗?谢谢你的帮助@Riccardo I更新了代码,您可以在其中输入checkExist函数将查找的任何url。如果数据存在且错误为零,则函数将完成'true'或'false',您可以在我说过的地方继续工作:)。请接受你问题的答案