Ios Firebase存储在上载时不断替换图像

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

我试图一次上传2个图像,并获取下载URL以转到Firebase数据库,但第二个图像函数不断替换第一个图像函数,因此当我单击下载URL获取第一个或第二个图像时,它将仅获取第二个图像。这是我的密码

@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',您可以在我说过的地方继续工作:)。请接受你问题的答案