Swift 3 Firebase存储 - 无法上传

问题描述:

我正尝试将UIImage文件上传到firebase存储。我正在努力弄清楚为什么上传没有完成,即使在调试时也是如此。Swift 3 Firebase存储 - 无法上传

我创建了一个Firebase应用并将存储规则设置为可公开访问。

var storageRef = FIRStorage.storage().reference().child("images/TestImage.png") 

然后在上传方法(其中meal.photo是一个UIImage)::

存储引用在性质如下所定义

let uploadData = UIImagePNGRepresentation(meal.photo!) 
let uploadTask = storageRef.put(uploadData!,metadata: nil){ metadata, error in 
       if (error != nil) { 
        // Uh-oh, an error occurred! 
       } else { 
        // Metadata contains file metadata such as size, content-type, and download URL. 
        let downloadURL = metadata!.downloadURL 
       } 
      } 

我没有收到任何构建/运行时错误,我已确认uploadData包含我希望上传的文件。但是,运行此方法没有任何事情发生。有任何想法吗?

编辑 我已经包含下面的参考整个片段:

@IBAction func unwindToMealList(_ sender: UIStoryboardSegue) { 
    if let sourceViewController = sender.source as? MealViewController, let meal = sourceViewController.meal { 
     if let selectedIndexPath = tableView.indexPathForSelectedRow { 
      // Update an existing meal. 
      meals[(selectedIndexPath as NSIndexPath).row] = meal 
      tableView.reloadRows(at: [selectedIndexPath], with: .none) 
     } else { 
      // Add a new meal. 
      let newIndexPath = IndexPath(row: meals.count, section: 0) 
      meals.append(meal) 

      let dateFormatter = DateFormatter() 
      dateFormatter.dateFormat = "MM-dd-yyyy" 
      let stringDate = dateFormatter.string(from: meal.date!) 
      let mealItem = ["name": meal.name, "date": stringDate, "mealType": meal.mealType] as [String : Any] 
      tableView.insertRows(at: [newIndexPath], with: .bottom) 
      // Add meal to firebase database 
      let mealRef = ref.child("meals") 
      mealRef.setValue(mealItem) 


      // Upload photo 
      // let imagesRef = storageRef.child("images") 
      let uploadData = UIImagePNGRepresentation(meal.photo!) 
      let uploadTask = storageRef.put(uploadData!,metadata: nil){ metadata, error in 
       if (error != nil) { 
        // Uh-oh, an error occurred! 
       } else { 
        // Metadata contains file metadata such as size, content-type, and download URL. 
        let downloadURL = metadata!.downloadURL 
        print(downloadURL) 
       } 
      } 
     } 
     // Save the meals. 
     saveMeals() 
    } 
} 
+0

的代码看起来是正确的。你有没有下载URL?没有错误或任何其他信息,调试几乎是不可能的。 –

+0

谢谢@MikeMcDonald。不,我没有得到一个downloadURL,代码似乎没有进入上传方法。我可以添加哪些其他信息可以帮助调试?道歉,对此很新颖。 – benjanisa

+0

你可以在它所在的地方添加一行'print(error)',或者在那里添加一个断点并确认没有错误?除非上传从未被调用过(或者你已经离线了足够长的时间),否则我不能相信这些选项都不会触发。 –

试试这个,我想你把saveMeals()函数来早,所以,上传方法不叫...

@IBAction func unwindToMealList(_ sender: UIStoryboardSegue) { 
if let sourceViewController = sender.source as? MealViewController, let meal = sourceViewController.meal { 
    if let selectedIndexPath = tableView.indexPathForSelectedRow { 
     // Update an existing meal. 
     meals[(selectedIndexPath as NSIndexPath).row] = meal 
     tableView.reloadRows(at: [selectedIndexPath], with: .none) 
    } else { 
     // Add a new meal. 
     let newIndexPath = IndexPath(row: meals.count, section: 0) 
     meals.append(meal) 

     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "MM-dd-yyyy" 
     let stringDate = dateFormatter.string(from: meal.date!) 
     let mealItem = ["name": meal.name, "date": stringDate, "mealType": meal.mealType] as [String : Any] 
     tableView.insertRows(at: [newIndexPath], with: .bottom) 
     // Add meal to firebase database 
     let mealRef = ref.child("meals") 
     mealRef.setValue(mealItem) 


     // Upload photo 
     // let imagesRef = storageRef.child("images") 
     let uploadData = UIImagePNGRepresentation(meal.photo!) 
     let uploadTask = storageRef.put(uploadData!,metadata: nil){ metadata, error in 
      if (error != nil) { 
       // Uh-oh, an error occurred! 
      } else { 
       // Metadata contains file metadata such as size, content-type, and download URL. 
       let downloadURL = metadata!.downloadURL 
       print(downloadURL) 
       // New code, put your saveMeals function here. 
       self.saveMeals() 
      } 
     } 
    } 
    // Old code, please remove this saveMeals function. 
    // Save the meals. 
    saveMeals() 
} 

}