2016-09-25 3 views
0

UIImage 파일을 Firebase 저장소에 업로드하려고합니다. 디버깅을하더라도 업로드가 완료되지 않은 이유를 파악하는 데 어려움을 겪고 있습니다.Swift 3 Firebase Storage - 업로드 할 수 없습니다.

나는 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

'/// Uh-oh, an error occurred! '라고 쓰여진 부분에'print (error)'행을 추가하거나 거기에 중단 점을 추가하고 오류가 없음을 확인할 수 있습니까? 업로드가 호출되지 않는 한 (또는 오랜 시간 동안 오프라인 상태 인 경우), 이러한 옵션 중 어느 것도 실행되지 않는다고 나는 믿을 수 없습니다. –

답변

0

이 시도를, 난 당신이 조기() 함수를 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() 
} 

}

관련 문제