2015-08-07 7 views
0

Эй, я пытаюсь использовать Mashape api CamFind для загрузки изображения, но я не уверен, как это сделать, Camfind хочет: - многоформатный кодированный запрос - заголовок для содержат ключевые - Счетчики: image_request [локали] и image_request [изображение]Быстрый запрос загрузки изображения с помощью camfind

Я застрял на этом в течение очень долгого времени, любая помощь приветствуется, я получаю ошибку 400

Вот мой код

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

Я предлагаю пройти через CloudSight напрямую, вместо использования Mashape. Также есть Objective C Cocoapod, с которым вы можете напрямую или учиться.

+0

Я пытаюсь придерживаться быстрого, так как я плохо разбираюсь в объективе-c, хотя мне удалось заставить его работать через mashape в объективе c, но есть ли способ использовать объективный код c в быстром проекте ? Единственная проблема, с которой я сталкиваюсь, заключается в том, что я не могу подключить раскадровку с объектным файлом c в моем быстром проекте, и мне нужно иметь возможность подключить изображение. Я думал об использовании части objc для запроса POST и GET и быстро для создания приложения, знаете ли вы, что это исправить? –

+0

Вот хороший пост о том, как создать Cocoapods с быстрым проектом: http://www.raywenderlich.com/97014/use-cocoapods-with-swift –

+0

Что касается изображения, это легко: убедитесь, что подключите изображениеView к контроллеру (если вы используете построитель интерфейса), а затем, когда пользователь нажимает какую-то кнопку действия, отправьте свойство imageView.image методу запроса изображения в контейнере. –