0

I am trying to send the image from UIImageView to Cognitive service (Emotion API) but server response with error.

{"error":{"code":"BadArgument","message":"Invalid Media Type."}}

My code:

let boundary = generateBoundaryString()

let url = NSURL(string: "https://api.projectoxford.ai/emotion/v1.0/recognize")!
var request =  URLRequest(url: url as URL)
request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.addValue("...my API KEY.....", forHTTPHeaderField: "Ocp-Apim-Subscription-Key")



request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let image_data =  UIImageJPEGRepresentation(cameraImageView.image!,75)

let body = NSMutableData()

let fname = "myphoto.jpg"
let mimetype = "image/jpg"

body.append("--\(boundary)\r\n".data(using: .utf8)!)
body.append("Content-Disposition:form-data; name=\"test\"\r\n\r\n".data(using: .utf8)!)
body.append("hi\r\n".data(using: .utf8)!)
body.append("--\(boundary)\r\n".data(using: .utf8)!)
body.append("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".data(using: .utf8)!)
body.append("Content-Type: \(mimetype)\r\n\r\n".data(using: .utf8)!)
body.append(image_data!)
body.append("\r\n".data(using: .utf8)!)

body.append("--\(boundary)--\r\n".data(using: .utf8)!)        
request.httpBody = body as Data
request.httpMethod = "POST"  
let task = URLSession.shared.dataTask(with: request){ data, response, error in
    if error != nil{
        print("Error -> \(error)")
        return
    }
    do {
        print("json-DONE")


        if let data = data, let jsonString = String(data: data, encoding: String.Encoding.utf8) , error == nil {
            print(jsonString)
            print("json-DONE1")
        } else {
            print("error=\(error!.localizedDescription)")
        }




    } catch {
        print(error)
    }
}

task.resume()

Thank you in advance!!

Hasya
  • 9,792
  • 4
  • 31
  • 46
Qzartec
  • 9
  • 3
  • change `body.append("Content-Type: \(mimetype)\r\n\r\n".data(using: .utf8)!)` to ` body.append("Content-Type:application/octet-stream\r\n\r\n".data(using: .utf8)!) ` – Vinodh Nov 23 '16 at 07:39
  • I changed let mimetype = "image/jpg" to let mimetype = "application/octet-stream" ... the same result :( {"error":{"code":"BadArgument","message":"Invalid Media Type."}} – Qzartec Nov 23 '16 at 08:09
  • instead of writing this much code, you could've used `Alamofire` to upload the image. That should resolve your problem. Do have a look at it: https://github.com/Alamofire/Alamofire – KrishnaCA Nov 23 '16 at 10:09

0 Answers0