Swift Image upload Request with camfind

218 Views Asked by At

Hey I'm trying to use the Mashape api CamFind to upload an image request but I'm not sure how to do it, Camfind want: - a multiform encoded request - the header to contain the key - paramaters: image_request[locale] and image_request[image]

I've been stuck on this for a very long time, any help is appreciated, I get a 400 error

Here's my code

 func post(){
    var TWITTERFON_FORM_BOUNDARY:String = "AaB03x"
    let url = NSURL(string: "https://camfind.p.mashape.com/image_requests")!
    var request:NSMutableURLRequest = NSMutableURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 10)
    var MPboundary:String = "--\(TWITTERFON_FORM_BOUNDARY)"
    var endMPboundary:String = "\(MPboundary)--"
    var data:NSData = UIImagePNGRepresentation(imageView.image)
    var filename:String = "image request image"
    var body:NSMutableString = NSMutableString();
    // params

    let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! NSString
    let documentDirectoryPath:NSString = path.stringByAppendingString("items.db")

    let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
    let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
     let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
        let imageURL = paths[0].stringByAppendingString("image.png")
    UIImagePNGRepresentation(imageView.image).writeToFile(imageURL, atomically: true)





    let parameters:NSDictionary = ["focus[x]": "480", "focus[y]": "640","image_request[language]": "en","image_request[locale]": "en_US","image_request[image]": imageURL]

        for (key, value) in parameters {
            body.appendFormat("\(MPboundary)\r\n")
            body.appendFormat("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.appendFormat("\(value)\r\n")
        }
    let parametersNS : NSData = NSKeyedArchiver.archivedDataWithRootObject(parameters)
    // image upload
    body.appendFormat("%@\r\n",MPboundary)
    body.appendFormat("Content-Disposition: form-data; name=\"\(filename)\"; filename=\"pen111.png\"\r\n")
    body.appendFormat("Content-Type: image/png\r\n\r\n")
    var end:String = "\r\n\(endMPboundary)"
    var myRequestData:NSMutableData = NSMutableData();
    myRequestData.appendData(body.dataUsingEncoding(NSUTF8StringEncoding)!)

    myRequestData.appendData(parametersNS)

    myRequestData.appendData(end.dataUsingEncoding(NSUTF8StringEncoding)!)
    var content:String = "multipart/form-data; boundary=\(TWITTERFON_FORM_BOUNDARY)"
    request.setValue(content, forHTTPHeaderField: "Content-Type")
    request.setValue("\(myRequestData.length)", forHTTPHeaderField: "Content-Length")
    request.HTTPBody = myRequestData
    request.HTTPMethod = "POST"
    request.setValue("9hcyYCUJEsmsh4lNTgpgVX1xRq0Ip1uogovjsn5Mte0ONVBtes", forHTTPHeaderField: "X-Mashape-Key")
    let session = NSURLSession.sharedSession()
    let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        if (error != nil) {
            println(error)
        } else {
            let httpResponse = response as? NSHTTPURLResponse
            let statusCode = (response as? NSHTTPURLResponse)?.statusCode ?? -1
            let statusDescripton = httpResponse?.description

            println(httpResponse)


        }
    })

    dataTask.resume()


}
1

There are 1 best solutions below

3
On BEST ANSWER

I'd suggest going through CloudSight directly instead of using Mashape. There's also an Objective C Cocoapod which you can use directly or learn from.