如何在swift 3中使用json post方法在服务器端上传图像

时间:2018-01-29 07:03:16

标签: swift3

我想将图片上传到服务器端,但我遇到了问题。这是我为它编写的代码:

import UIKit
class ViewControllerngodetails: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate,UITextFieldDelegate {



@IBOutlet weak var imageviewngo: UIImageView!

@IBOutlet weak var Textngo: UITextField!

@IBOutlet weak var textparentorg: UITextField!

@IBOutlet weak var texttreasurer: UITextField!

@IBOutlet weak var textsecratary: UITextField!

@IBOutlet weak var textchairman: UITextField!

@IBOutlet weak var textcheiffunction: UITextField!

@IBOutlet weak var textngoname: UITextField!



var t = NGOdetails()

//var temp1 = Int()



var img : UIImage!



var picker = UIImagePickerController()

override func viewDidLoad() {

    super.viewDidLoad()

    textngoname.text = t.Nameofngo

    textchairman.text = t.NameofChairman

    textparentorg.text = t.ParentOrganization

    textsecratary.text = t.NameofSeceratary

    texttreasurer.text = t.NameofTreasurer

    textcheiffunction.text = t.NameofChiefFunctionary

    Textngo.text = t.AboutNGO





    self.textngoname.delegate =  self

    self.textchairman.delegate = self

    self.textcheiffunction.delegate = self

    self.textsecratary.delegate = self

    self.texttreasurer.delegate = self

    self.textparentorg.delegate = self

    self.Textngo.delegate = self



    // Do any additional setup after loading the view.

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    self.view.endEditing(true)

}



func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()

    return true

}



override func didReceiveMemoryWarning() {

    super.didReceiveMemoryWarning()

    // Dispose of any resources that can be recreated.

}

@IBAction func update_button(_ sender: Any) {

    picker.sourceType = UIImagePickerControllerSourceType.savedPhotosAlbum

    picker.delegate = self

    self.present(picker, animated: true, completion: nil)

}



func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    img = info[UIImagePickerControllerOriginalImage] as! UIImage



    self.imageviewngo.image = img



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

}







@IBAction func savebutton(_ sender: Any) {

myImageuploadrequest()



}



func myImageuploadrequest()

{



    let id = UserDefaults.standard.string(forKey: "NgoId")



            var request = URLRequest(url: URL(string: "http://www.shreetechnosolution.com/funded/ngo_profileupdate.php?")!)

            request.httpMethod = "POST"





    let param = ["Nameofngo" : "\(textngoname.text!)","NameofChiefFunctionary" : "\(textcheiffunction.text!)","NameofChairman" : "\(textchairman.text!)","NameofSeceratary" : "\(textsecratary.text!)","NameofTreasurer" : "\(texttreasurer.text!)","photoofNGO" : "\(img)","ParentOrganization" : "\(textparentorg.text!)","AboutNGO" : "\(Textngo.text!)","ngoid" : "\(id!)","value" : "NGO Details"]

    //"photoofNGO" : "\(imageviewngo.image!)",

    let boundary = generateBoundaryString()

    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")



    let imageData = UIImageJPEGRepresentation(imageviewngo.image!, 1)



    if(imageData==nil)  { return; }



   // request.httpBody = createBodyWithParameters(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data

    request.httpBody = self.createBodyWithParameters(parameters: param as [String : NSObject], filePathKey: "file", boundary: self.generateBoundaryString()) as Data





    let task = URLSession.shared.dataTask(with: request as URLRequest) {

        data, response, error in



        if error != nil {

            print("error=\(error)")

            return

        }



        // You can print out response object

        print("******* response = \(response)")



        // Print out reponse body

        let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)

        print("****** response data = \(responseString!)")



        do {

            let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary



            print(json ?? "")



            DispatchQueue.main.async(execute: {

               self.imageviewngo.image = nil;

            });



        }catch

        {

            print(error)

        }



    }



    task.resume()

}

//, imageDataKey: NSData

func createBodyWithParameters(parameters: [String: NSObject]?, filePathKey: String?, boundary: String) -> NSData {

    let body = NSMutableData();



    if parameters != nil {

        for (key, value) in parameters! {

            body.appendString(string: "--\(boundary)\r\n")

            body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")

            body.appendString(string: "\(value)\r\n")

        }

    }

    body.appendString(string: "--\(boundary)\r\n")



    let filename = "user-profile.jpg"

    let mimetype = "image/jpg"

    let imageData = UIImageJPEGRepresentation(img, 1)

    body.appendString(string: "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")

    body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n")

   // body.append(imageDataKey as Data)

    body.appendString(string: "\r\n")

    body.appendString(string: "--\(boundary)--\r\n")



    return body

}







func generateBoundaryString() -> String {

    return "Boundary-\(NSUUID().uuidString)"

}



}



extension NSMutableData {



func appendString(string: String) {

    let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)



    append(data!)

}

}

0 个答案:

没有答案