2017-08-05 58 views
1

我在向Swift中的Firebase存储上传图片数组时遇到问题。 我有这样的功能:Firebase连续上传在中途停止,只上传最后一张图片

func uploadImages(ref: FIRStorageReference, data: Data, completionHandler: @escaping imagesHandler) { 

    let task = ref.put(data) 

    let observer = task.observe(.progress) { (snapshot) in 
     print(snapshot.progress!) 
    } 

    task.observe(.success) { (snapshot) in 
     if let url = snapshot.metadata { 

      if let link = url.downloadURL()?.absoluteString { 

       completionHandler(link) 
      }else { 

       completionHandler(nil) 
      } 
     }else { 

      completionHandler(nil) 
     } 
    } 
} 

,我在这里使用:

var downloadURLImages = [String]() 

for each in itemImage { 

    self.uploadImages(ref: self.inventoryStorageRef, data: each, completionHandler: { (links) in 
     if let url = links { 

      downloadURLImages.append(url) 
     } 
    }) 
} 

的问题是,我得到的下载网址,但只上载数组的最后一个影像。在第一个函数中,我让观察者看到发生了什么,下面是结果。

随着2个图像被上传:正在上传

<NSProgress: 0x60000052b2c0> : Parent: 0x0/Fraction completed: 0.0000/Completed: 0 of 41605 
<NSProgress: 0x60000052a5a0> : Parent: 0x0/Fraction completed: 0.0026/Completed: 108 of 41713 
<NSProgress: 0x608000135f40> : Parent: 0x0/Fraction completed: 0.1990/Completed: 8300 of 41713 
<NSProgress: 0x608000135f40> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 
<NSProgress: 0x60000052a640> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 

具有4的图像:

<NSProgress: 0x600000520280> : Parent: 0x0/Fraction completed: 0.0000/Completed: 0 of 41605 
<NSProgress: 0x600000527580> : Parent: 0x0/Fraction completed: 0.0000/Completed: 0 of 29438 
<NSProgress: 0x60000052b5e0> : Parent: 0x0/Fraction completed: 0.0000/Completed: 0 of 29438 
<NSProgress: 0x60000052a5a0> : Parent: 0x0/Fraction completed: 0.0000/Completed: 0 of 41605 
<NSProgress: 0x600000527800> : Parent: 0x0/Fraction completed: 0.0000/Completed: 0 of 41605 
<NSProgress: 0x60000052b7c0> : Parent: 0x0/Fraction completed: 0.0026/Completed: 108 of 41713 
<NSProgress: 0x60000052aaa0> : Parent: 0x0/Fraction completed: 0.0037/Completed: 108 of 29546 
<NSProgress: 0x60000052b7c0> : Parent: 0x0/Fraction completed: 0.0037/Completed: 108 of 29546 
<NSProgress: 0x60000052ab40> : Parent: 0x0/Fraction completed: 0.0026/Completed: 108 of 41713 
<NSProgress: 0x60000052ab40> : Parent: 0x0/Fraction completed: 0.0026/Completed: 108 of 41713 
<NSProgress: 0x60000052c1c0> : Parent: 0x0/Fraction completed: 0.1990/Completed: 8300 of 41713 
<NSProgress: 0x60000052c1c0> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 
<NSProgress: 0x60000052c1c0> : Parent: 0x0/Fraction completed: 0.1990/Completed: 8300 of 41713 
<NSProgress: 0x6080001381a0> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 
<NSProgress: 0x60000052c6c0> : Parent: 0x0/Fraction completed: 0.2809/Completed: 8300 of 29546 
<NSProgress: 0x60000052c6c0> : Parent: 0x0/Fraction completed: 0.1990/Completed: 8300 of 41713 
<NSProgress: 0x60000052c760> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 
<NSProgress: 0x608000139000> : Parent: 0x0/Fraction completed: 0.2809/Completed: 8300 of 29546 
<NSProgress: 0x608000136ee0> : Parent: 0x0/Fraction completed: 0.2809/Completed: 8300 of 29546 
<NSProgress: 0x60000052b180> : Parent: 0x0/Fraction completed: 0.2809/Completed: 8300 of 29546 
<NSProgress: 0x60000052c120> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 
<NSProgress: 0x608000139280> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 
<NSProgress: 0x60000052bb80> : Parent: 0x0/Fraction completed: 1.0000/Completed: 41713 of 41713 

只有最后图像被完全上传。

我该怎么办?

+0

你到图像提供不同的名字?你只是把数据放在服务器上,我认为使用putData,每次数据都被替换为新值,因为没有提供名称。 –

回答

0

尝试下面的代码

func uploadImages(ref: FIRStorageReference, data: Data, completionHandler: @escaping imagesHandler) { 
     let imageName = NSUUID().uuidString 
     let task = ref.child("\(imageName).png").putData(uploadData, metadata: nil, completion: { (snapshot, error) in 
       if let error = error { 
        print(error) 
        completionHandler(nil) 
       } 
      }) 

    let observer = task.observe(.progress) { (snapshot) in 
     print(snapshot.progress!) 
    } 

    task.observe(.success) { (snapshot) in 
     if let url = snapshot.metadata { 

      if let link = url.downloadURL()?.absoluteString { 

       completionHandler(link) 
      }else { 

       completionHandler(nil) 
      } 
     }else { 

      completionHandler(nil) 
     } 
    } 
} 
+0

此代码工作!非常感谢!干杯 – Trave

+0

欢迎..高兴帮助:) –