Swift + ios 9, sending post data with base64 image data

心不动则不痛 提交于 2020-01-16 04:42:06

问题


I have looked at the different questions related to send a post request with NS on swift. I am having issues however with the following code where the responding server doesn't even see it as being a post request.

What am I missing:

    var request = NSMutableURLRequest(URL: NSURL(string: url)!)


    request.HTTPMethod = "POST"

    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

    request.addValue("application/json", forHTTPHeaderField: "Accept")



    var imageData = UIImageJPEGRepresentation(img, 0.6)

    var base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) // encode the image



    var err: NSError? = nil

    var params = ["image":[ "content_type": "image/jpeg", "filename":"\(self.riderid).jpg", "file_data": base64String]]

    println("Image params \(params)")

    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions(0), error: &err)!




    var task = session.dataTaskWithRequest(request, completionHandler: { data, response, error -> Void in

        var strData = NSString(data: data, encoding: NSUTF8StringEncoding)

        var err: NSError?

        println("Image Response \(err) \(data)")

        // process the response

        var hoge = JSON(data: data!)

        println("Image Response \(hoge)")



    })

回答1:


You need task.resume() after task block.




回答2:


I know it's late replay but maybe it's help someone

var base64String = Detail.image.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
    print(base64String)
   var base64String2 = base64String.replacingOccurrences(of: "+", with: "%2B", options: NSString.CompareOptions.literal, range: nil)
    base64String2 = base64String.replacingOccurrences(of: "/", with: "%2F", options: NSString.CompareOptions.literal, range: nil)
    print(base64String2)

Do something like this

  func insertDoctor_Detailmaster(_ Detail:DoctorDetail, isInsertOrUpdate:String){
        var request:NSMutableURLRequest!
        var postString:String
        var base64String = Detail.image.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
        print(base64String)
       var base64String2 = base64String.replacingOccurrences(of: "+", with: "%2B", options: NSString.CompareOptions.literal, range: nil)
        base64String2 = base64String.replacingOccurrences(of: "/", with: "%2F", options: NSString.CompareOptions.literal, range: nil)
        print(base64String2)

        if(isInsertOrUpdate == "insert"){
            request = NSMutableURLRequest(url: URL(string: link.commonlink + "insert_doctor_master.php")!)
            param = "doctor_id=\(Detail.doctor_id)&first_name=\(Detail.first_name)&last_name=\(Detail.last_name)&mid_name=\(Detail.mid_name)&speciality=\(Detail.speciality)&dob=\(Detail.dob)&gender=\(Detail.gender)&address_id=\(Detail.address_id)&mobile_number=\(Detail.mobile_number)&user_image=\(base64String2)"

            _ = SD.executeChange(sqlStr: "INSERT INTO doctor_master (doctor_id, first_name,last_name, mid_name, dob, gender,doctorImage,speciality, address_id, mobileNumber) VALUES ('\(Detail.doctor_id)','\(Detail.first_name)','\("")','\(Detail.mid_name)','\(Detail.dob)','\(Detail.gender)','\(base64String)','\(Detail.speciality)','\(Detail.mobile_number)','\(Detail.mobile_number)')")

        }else{
            request = NSMutableURLRequest(url: URL(string: link.commonlink + "update_doctor_master.php")!)
            param = "doctor_id=\(Detail.doctor_id)&first_name=\(Detail.first_name)&last_name=\(Detail.last_name)&mid_name=\(Detail.mid_name)&speciality=\(Detail.speciality)&dob=\(Detail.dob)&gender=\(Detail.gender)&address_id=\(Detail.address_id)&mobile_number=\(Detail.mobile_number)&\(base64String2)"

            _ = SD.executeChange(sqlStr: "UPDATE doctor_master SET doctor_id = \(Detail.doctor_id), firstName ='\(Detail.first_name)',last_name = '\("")', mid_name ='\(Detail.mid_name)', dob ='\(Detail.dob)',gender = '\(Detail.gender)',doctorImage='\(base64String)',speciality='\(Detail.speciality)', address_id ='\(Detail.mobile_number)',mobileNumber = '\(Detail.mobile_number)'")


        }
        print(param)

        postString = "q=\(AGS().encrypt(PlainText: param!))"

        request.httpMethod = "POST"

        request.httpBody = postString.data(using: String.Encoding.utf8)
        let session = URLSession.shared
        let task = session.dataTask(with: request as URLRequest) {data,response,error in
            if error != nil {
                print("error=\(error)")
                return
            }
            print("response = \(response)")
            let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
            print(responseString!)
            res.variable.dosage = responseString as! String
        }
        task.resume()
        print(postString)
    }



回答3:


Make sure your Session object's configuration for your request and as JMStudios.jrichardson said , write task.resume() after task block.



来源:https://stackoverflow.com/questions/32959296/swift-ios-9-sending-post-data-with-base64-image-data

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!