[英]Swift 3 Firebase Storage - Unable to upload
我正在嘗試將 UIImage 文件上傳到 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()
}
}
試試這個,我想你把 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()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.