Как приостановить выполнение при загрузке файла в хранилище Firebase - PullRequest
0 голосов
/ 19 июня 2020

Я загружаю файлы в Firebase Storage, и мне нужно дождаться завершения загрузки файла и вернуть URL-путь к файлам.

Мой текущий код вызывает uploadImage и требует возврата строки URL. Однако код возвращается до того, как файл будет полностью загружен, а затем, как только файл будет загружен, выполняется storageReference.downloadURL и устанавливается imageURL. Итак, код работает, мне нужно, чтобы он приостановил загрузку файлов, а затем вернул URL-адрес. Любые идеи приветствуются!

//
//  FirebaseStorage.swift
//  ItemizePro
//
//  Created by Tyler Wasick on 6/14/20.
//  Copyright © 2020 Tyler Wasick. All rights reserved.
//

import Foundation
import FirebaseFirestore
import FirebaseAuth
import Firebase

class FirebaseStorageService {

    // Upload image to Firebase Storage
    static func uploadImage(image:UIImage, fileType:String) -> String {

        // Image URL (String)
        var imageURL = ""

        if Auth.auth().currentUser != nil {

            // Get UID
            let uid = Auth.auth().currentUser?.uid

            // Setup variables
            let fileName = UUID().uuidString

            // Create a Firebase Storage reference
            let storageReference = Storage.storage().reference().child("\(fileType)/\(uid!)/\(fileName).jpg")

            // Uploads the image to Firebase Storage
            let photoData = image.jpegData(compressionQuality: 0.1)

            guard photoData != nil else {
                print("No photo provided")
                return "NoPhoto"
            }

            storageReference.putData(photoData!, metadata: nil) { (metadata, err) in

                // Check for upload errors
                if err != nil {

                    // If an error has occured, print the error (to console) and return
                    print(err!)
                    return
                }
                else {
                    // Set image URL
                    storageReference.downloadURL { (url, err) in

                        // Check for errors
                        if err != nil {

                            // If an error has occured, print the error (to console) and return
                            print(err!)
                            return
                        }
                        else {
                            print("Upload successful!")
                            imageURL = url!.absoluteString
                        }
                    }
                }
            }

            // Returns a string of the url location
            return imageURL
        }

        return imageURL
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...