Сохраните несколько изображений в базе данных в виде строк - PullRequest
0 голосов
/ 17 июня 2019

Я пробовал разные способы сохранить кнопку изображения в базе данных.Однако, как бы я ни старался, меня встречают разные ошибкиМне было интересно, может ли кто-нибудь взглянуть на мой код и, возможно, привести меня в правильном направлении.

ниже - мой @objc func handlePost ().После нажатия этой кнопки я бы хотел, чтобы пользователи могли сохранять данные в базе данных Firebase.Я ожидаю, что фотографии пользователя будут сохранены в хранилище, а затем URL-адрес будет сохранен в базе данных.

@objc func handlePost() {

    let timestamp = Int(Date().timeIntervalSince1970)
    guard let category = JobCategory.text, let description = JobBio.text, let cost = price.text else {
        print("Error")
        return
    }

    guard let uid = Auth.auth().currentUser?.uid else { return }
    self.mapView?.isMyLocationEnabled = true
    let cords = ["Latitude": self.locationManager.location!.coordinate.latitude, "Longitude": self.locationManager.location!.coordinate.longitude]
    let docData: [String: Any] = [
        "cords" : cords,
        "uid": uid,
        "category": category,
        "imageUrl1": poster?.imageUrl1 ?? "",
        "imageUrl2": poster?.imageUrl2 ?? "",
        "imageUrl3": poster?.imageUrl3 ?? "",
        "price": cost,
        "description": description,
        "timeStamp": timestamp
    ]

    let hud = JGProgressHUD(style: .dark)
    hud.textLabel.text = "Posting Job"
    hud.show(in: view)
    self.postJobDataIntoDatabseWithUID(uid: uid, values: docData as [String : AnyObject])

    print("Finished saving user info")
    self.dismiss(animated: true, completion: {
        print("Dismissal complete")
    })
    hud.dismiss()
}
private func postJobDataIntoDatabseWithUID(uid: String, values: [String: AnyObject]) {
    let ref = Database.database().reference(fromURL: "https://oddjobs-b131f.firebaseio.com/")
    let usersReference = ref.child("JobPost").child(uid)
    usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
        if err != nil {
            print("err")
            return
        }

        self.dismiss(animated: true, completion: nil)
    })

}

и, наконец, мой файл расширения, который управляет загрузкой фотографии в хранилище Firebase.

 lazy var image1Button = createButton(selector: #selector(handleSelectPhoto))
lazy var image2Button = createButton(selector: #selector(handleSelectPhoto))
lazy var image3Button = createButton(selector: #selector(handleSelectPhoto))

@objc func handleSelectPhoto(button: UIButton) {
    print("Select photo with button:", button)
    let imagePicker = CustomImagePickerController()
    imagePicker.delegate = self
    imagePicker.imageButton = button
    present(imagePicker, animated: true)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    let selectedImage = info[.originalImage] as? UIImage
    let imageButton = (picker as? CustomImagePickerController)?.imageButton
    imageButton?.setImage(selectedImage?.withRenderingMode(.alwaysOriginal), for: .normal)
    dismiss(animated: true)

    let filename = UUID().uuidString
    let ref = Storage.storage().reference().child("job_images").child("\(filename).png")
    guard let uploadData = selectedImage?.jpegData(compressionQuality: 0.75) else { return }

    let hud = JGProgressHUD(style: .dark)
    hud.textLabel.text = "Uploading image..."
    hud.show(in: view)
    ref.putData(uploadData, metadata: nil) { (nil, err) in
        if let err = err {
            hud.dismiss()
            print("Failed to upload image to storage:", err)
            return
        }

        print("Finished uploading image")
        ref.downloadURL(completion: { (url, err) in

            hud.dismiss()

            if let err = err {
                print("Failed to retrieve download URL:", err)
                return
            }

            print("Finished getting download url:", url?.absoluteString ?? "")

            if imageButton == self.image1Button {
                self.poster?.imageUrl1 = url?.absoluteString
            } else if imageButton == self.image2Button {
                self.poster?.imageUrl2 = url?.absoluteString
            } else {
                self.poster?.imageUrl3 = url?.absoluteString
            }


        })
    }
}

Я бы предположил, что это позволило бы мне сохранить три фотографии в базе данных Firebase, но, похоже, у меня возникла проблема с получением URL-адреса из хранилища и публикацией в базе данных.Буду очень признателен, если кто-нибудь сможет мне помочь!

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