2015-09-06 71 views
0

,这是我的JSON结构存储图像到的火力点登录的用户

用户:

simpleLogin1:

  • 名称
  • 电子邮件
  • 密码
  • 图片

这是我如何创建ref和用户:

var ref = Firebase(url: "https://chatty93.firebaseio.com/") 
    var userId = authData.uid 

         let newUser = [ 
          "Provider" : authData.provider, 
          "email" : authData.providerData["email"] as? NSString as? String, 
          "name"  : self.Name.text, 
          "Image" : "", 
         ] 
        self.ref.childByAppendingPath("users").childByAppendingPath(authData.uid).setValue(newUser) 

由登录用户对第一视图控制器然后另一个视图控制器用户提供在图像上提供的名称电子邮件地址和密码。 为此我有这个视图控制器上的图像的图像视图,用户将选择它并按下更新按钮来更新他的个人资料的图像,现在如何将此图像保存在我的firebase中,然后检索它以显示它也在任何其他视图控制器..

+0

所以你希望你的图片上传到 – Lamar

+0

一个JSON页面,我发现对图像数据编码成的NSString并将其保存在火力点的一种方式,我已经尝试过了,我认为图像已被保存,但现在我该如何检索它? –

+0

[Swift2从Firebase中检索图片]的可能重复(http://stackoverflow.com/questions/33644560/swift2-retrieving-images-from-firebase) – thiagowfx

回答

1

我知道答案。但在我开始解释它之前。我们的工具是Alamofire 3.0,Firebase 2.5,Imageshackapi和Imageshack。

我们的应用程序可以发布图像和发布文本。

// 
// Post.swift 
// firebase social network 
// 
// Created by durul dalkanat on 1/21/16. 
// Copyright © 2016 durul dalkanat. All rights reserved. 

import Foundation 

class Post { 
    private var _postDescription: String! 
    private var _imageUrl: String? 
    private var _postKey: String! 

    var postDescription: String { 
     return _postDescription 
    } 

    var imageUrl: String? { 
     return _imageUrl 
    } 



    init(description: String, imageUrl: String?) { 
     self._postDescription = description 
     self._imageUrl = imageUrl 
    } 

    init(postKey: String, dictionary: Dictionary<String, AnyObject>) { 
     self._postKey = postKey 

     if let imgUrl = dictionary["imageUrl"] as? String { 
      self._imageUrl = imgUrl 
     } 

     if let desc = dictionary["description"] as? String { 
      self._postDescription = desc 
     } 
    } 
} 

让我们编码viewcontroller。但是你应该自己配置customtableviewCell。

// 
// ViewController.swift 
// firebase social network 
// 
// Created by durul dalkanat on 1/21/16. 
// Copyright © 2016 durul dalkanat. All rights reserved. 
// 

import UIKit 
import Firebase 
import Alamofire 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    @IBOutlet weak var tableView: UITableView! 
    @IBOutlet weak var postField: UITextField! 

    @IBOutlet weak var postImg: UIImageView! 

    var posts = [Post]() 
    var imageSelected = false 
    var imagePicker: UIImagePickerController! 

    static var imageCache = NSCache() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.delegate = self 
     tableView.dataSource = self 

     tableView.estimatedRowHeight = 358 
     imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 

     //Sync data with Firebase 
     DataService.ds.REF_POSTS.observeEventType(.Value, withBlock: { snapshot in 
      print(snapshot.value) 

      //Parsing firebase data 
      self.posts = [] 
      if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] { 

       for snap in snapshots { 

        if let postDict = snap.value as? Dictionary<String, AnyObject> { 
         let key = snap.key 
         let post = Post(postKey: key, dictionary: postDict) 
         self.posts.append(post) 
        } 

       } 

      } 

      self.tableView.reloadData() 
     }) 

    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return posts.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let post = posts[indexPath.row] 

     if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell { 

      cell.request?.cancel() 

      var img: UIImage? 

      if let url = post.imageUrl { 
       img = ViewController.imageCache.objectForKey(url) as? UIImage 
      } 

      cell.configureCell(post, img: img) 

      return cell 
     } else { 
      return PostCell() 
     } 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

     let post = posts[indexPath.row] 

     if post.imageUrl == nil { 
      return 150 
     } else { 
      return tableView.estimatedRowHeight 
     } 
    } 


    @IBAction func selectImage(sender: UITapGestureRecognizer) { 
     presentViewController(imagePicker, animated: true, completion: nil) 
    } 

    @IBAction func makePost(sender: AnyObject) { 

     if let txt = postField.text where txt != "" { 

      if let img = postImg.image { 
       let urlStr = "https://post.imageshack.us/upload_api.php" 
       let url = NSURL(string: urlStr)! 

       //compression quality. 
       let imgData = UIImageJPEGRepresentation(img, 0.2)! 

       //Converting data from strings 
       let keyData = "You should write own api number here".dataUsingEncoding(NSUTF8StringEncoding)! 

       //Converting data from json 
       let keyJSON = "json".dataUsingEncoding(NSUTF8StringEncoding)! 


       Alamofire.upload(.POST, url, multipartFormData: { multipartFormData in 

        //Check this documentaion https://code.google.com/p/imageshackapi/wiki/ImageshackAPI 
        multipartFormData.appendBodyPart(data: imgData, name:"fileupload", fileName:"image", mimeType: "image/jpg") 
        multipartFormData.appendBodyPart(data: keyData, name: "key") 
        multipartFormData.appendBodyPart(data: keyJSON, name: "format") 

        }) { encodingResult in 

         switch encodingResult { 

         case .Success(let upload, _, _): 
          upload.responseJSON(completionHandler: { response in 

           let result = response.result 
           print(result.value?.debugDescription) 

           if let info = result.value as? Dictionary<String, AnyObject> { 

            if let links = info["links"] as? Dictionary<String, AnyObject> { 
             print(links) 
             if let imgLink = links["image_link"] as? String { 
              self.postToFirebase(imgLink) 
             } 
            } 
           } 
          }) 

         case .Failure(let error): 
          print(error) 
          //Maybe show alert to user and let them try again 
         } 
       } 
      } else { 
       postToFirebase(nil) 
      } 


     } 

    } 

    //Saving Posts to Firebase 
    func postToFirebase(imgUrl: String?) { 

     var post: Dictionary<String, AnyObject> = [ 
      "description":postField.text!  
    ] 

     if imgUrl != nil { 
      post["imageUrl"] = imgUrl! 
     } 

     //Save new post to firebase 
     let fbPost = DataService.ds.REF_POSTS.childByAutoId() 
     fbPost.setValue(post) 

     //Clear out fields 
     self.postField.text = "" 
     self.postImg.image = UIImage(named: "camera") 

     tableView.reloadData() 
    } 

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { 
     imagePicker.dismissViewControllerAnimated(true, completion: nil) 
     postImg.image = image 
     imageSelected = true 

    } 
} 

我希望,这个代码块会帮助你。但不要忘记测试数据无法立即更新。

这是我的计划。

enter image description here

相关问题