【问题标题】:UIImagepicker is uploading to the wrong Firebase storageUIImagepicker 正在上传到错误的 Firebase 存储
【发布时间】:2017-05-11 05:31:00
【问题描述】:

我有两个图像视图,我习惯于让用户上传他们的照片。当我去上传主要的个人资料图片时,一切都运行良好,并且图像被存储在适当的 Firebase 存储子中,但是当我按下下一个图像视图上传我的下一张照片时,它被存储在错误的 Firebase 存储中。

我尝试通过使用两个单独的 uiimagepicker 来解决此问题,但这似乎并没有解决问题。所以我的问题是,为什么当我按SecondPhoto 时,它会上传到Profile_Images 而不是我想要的Second_Images

import UIKit
import Firebase
import FBSDKLoginKit

class ProfileViewController: UIViewController,     UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var secondPhoto: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.imageView.frame.size.width / 2;
    self.imageView.layer.cornerRadius = 24
    self.imageView.clipsToBounds = true;

self.secondPhoto.layer.cornerRadius =   self.secondPhoto.frame.size.height / 2;


    secondPhoto.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSecondProfileImageView)))


    profilePicture.addGestureRecognizer(UITapGestureRecognizer(target:self, action: #selector(handleSelectProfileImageView)))

    let uid = FIRAuth.auth()?.currentUser?.uid
    FIRDatabase.database().reference().child("Users").child(uid!).observeSingleEvent(of: .value, with: {(snapshot) in if let dictionary = snapshot.value as? [String: AnyObject]
    {
        self.imageView.loadImageUsingCachWithUrlString(urlString:dictionary["profileImageUrl"] as! String)
        self.secondPhoto.loadImageUsingCachWithUrlString(urlString:dictionary["secondImageUrl"] as! String)

        }
    }, withCancel: nil)

}
    func handleSelectProfileImageView() {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.allowsEditing = true
        present(picker, animated: true, completion:nil)
    }
    func imagePickerController(_ picker: UIImagePickerController,  didFinishPickingMediaWithInfo info: [String : Any]) {

        var selectedImageFromPicker:UIImage?


        if let editedImage = info["UIImagePickerControllerEditedImage"] as?  UIImage{
            selectedImageFromPicker = editedImage

        }else if let originalImage =  info["UIIMagePickerControllerOriginalImage"] as? UIImage{
            selectedImageFromPicker = originalImage

        }

        if let selectedImage = selectedImageFromPicker{
            updateProfileImageInFirebase(image: selectedImage)
        }

        dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        print("canceled picker")
        dismiss(animated: true, completion: nil)
    }

func updateProfileImageInFirebase(image: UIImage){
    let user = FIRAuth.auth()?.currentUser
    guard let uid = user?.uid else {
        return
    }
    if user != nil {
        let imageName = NSUUID().uuidString
        let storageRef =  FIRStorage.storage().reference().child("Profile_Images").child("\(imageName).jpg")
        if let uploadData = UIImageJPEGRepresentation(image, 0.1) {
            storageRef.put(uploadData, metadata: nil, completion: { (metadata, error) in
                if error != nil {
                    print(error!)
                    return
                }

                if let profileImageUrl = metadata?.downloadURL()?.absoluteString {
                    FIRDatabase.database().reference().child("Users").child(uid).updateChildValues(["profileImageUrl": profileImageUrl])
                }
            })
        }
    }
}

func handleSecondProfileImageView() {
    let picker = UIImagePickerController()
    picker.delegate = self
    picker.allowsEditing = true
    present(picker, animated: true, completion:nil)
}
func secondimagePickerController(_ picker: UIImagePickerController,  didFinishPickingMediaWithInfo info: [String : Any]) {

    var selectedImageFromPicker:UIImage?


    if let editedImage = info["UIImagePickerControllerEditedImage"] as?  UIImage{
        selectedImageFromPicker = editedImage

    }else if let originalImage =  info["UIIMagePickerControllerOriginalImage"] as? UIImage{
        selectedImageFromPicker = originalImage

    }

    if let selectedImage = selectedImageFromPicker{
        updatesecondAvatarImageInFirebase(image: selectedImage)
    }

    dismiss(animated: true, completion: nil)
}

func secondimagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    print("canceled picker")
    dismiss(animated: true, completion: nil)
}

func updatesecondAvatarImageInFirebase(image: UIImage){
    let user = FIRAuth.auth()?.currentUser
    guard let uid = user?.uid else {
        return
    }
    if user != nil {
        let imageName = NSUUID().uuidString
        let storageRef =  FIRStorage.storage().reference().child("Second_Images").child("\(imageName).jpg")
        if let uploadData = UIImageJPEGRepresentation(image, 0.1) {
            storageRef.put(uploadData, metadata: nil, completion: { (metadata, error) in
                if error != nil {
                    print(error!)
                    return
                }

                if let secondImageUrl = metadata?.downloadURL()?.absoluteString {
                    FIRDatabase.database().reference().child("Users").child(uid).updateChildValues(["secondImageUrl": secondImageUrl])
                }
            })
        }
    }
}

}

【问题讨论】:

  • 每张图片/UIImageView都可以使用特定的imagePath

标签: ios swift firebase uiimagepickercontroller firebase-storage


【解决方案1】:

我能够通过向按钮添加标签并使用开关控件来解决它

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 2017-03-20
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2020-10-26
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多