2015-08-05 20 views
5

Ho provato diverse cose per creare l'equivalente rapido di questa richiesta cURL, ma non riuscivo a farlo funzionare.equivalente in cURL in Swift - iOS

curl -X POST -F "[email protected]/Users/nicolas/sample.png" -F "mode=document_photo" https://api.idolondemand.com/1/api/sync/ocrdocument/v1 -F "apikey=xxx-xxx-xxx-xxx-xxx" 

Il codice corrispondente è indicato di seguito.

func getText (image: UIImage){ 

    let apiKey = "xxx-xxx-xxx-xxx-xxx" 

    let request = NSMutableURLRequest(URL: NSURL(string: "https://api.idolondemand.com/1/api/sync/ocrdocument/v1")!) 
    request.HTTPMethod = "POST" 
    request.addValue(apiKey, forHTTPHeaderField: "apikey") 
    request.addValue("document_photo", forHTTPHeaderField: "mode") 
    request.HTTPBody = UIImageJPEGRepresentation(image, 1) 

    let task = NSURLSession.sharedSession().uploadTaskWithRequest(request, fromData: UIImageJPEGRepresentation(image, 1), completionHandler: {data, response, error -> Void in 


     if let _ = data { 
      var error:NSError? = nil 
      do { 
       let jsonObject : AnyObject = try NSJSONSerialization.JSONObjectWithData(data!, options: []) 
       let json = JSON(jsonObject) 
       if let ocr_results = json["text_block"][0]["text"].string { 
        self.returnText(ocr_results) 
       } 
      } catch let error1 as NSError { 
       error = error1 
       print(error) 
      } catch { 
       fatalError() 
      } 
     } 

}) 

Sarei felice se ottengo una risposta.

risposta

1

Nel comando riccio, si sta definendo i campi del modulo file, mode e apikey, ed è necessario per codificare loro in forma multipart/form-data e mettere questo nel HTTPBody. Alcuni googling veloci rivelano la libreria SRWebClient (tra molti altri) che ti aiuterà a fare questo tipo di richiesta.

+0

Cosa hai cercato per trovare questa libreria? Perché questa libreria non funziona in swift 2.0, quindi posso cercare un'altra libreria che gira con swift 2.0. – NMAC427

+1

Ho cercato "multipart/form-data". Nota che puoi anche usare le librerie Objective-C, di cui ce ne sono molte. La maggior parte delle librerie di richieste HTTP è in grado di farlo: se dicono che supportano i caricamenti/l'invio di file, questo è il modo in cui è stato realizzato. – Jesper

+0

Inoltre, la maggior parte delle librerie si prenderà cura di impostare 'NSURLRequest' interamente per te (in questo modo, ad esempio, non ottieni un' NSData' che devi assegnare a 'HTTPBody'). – Jesper