2017-07-18 5 views
1

Ich möchte eine Bild-URL mit Alamofire auf meinen Server hochladen. Ich habe eine Struktur, die meine Bild-URL und eine CGRect hält, die auf dem Rahmen wie folgt aussieht:Struct zum Server hochladen Mit Alamofire

public struct TGImage { 

    private(set) var url: String? 
    private(set) var crop: CGRect 

    public init(url: String, crop: CGRect) { 
     self.url = url 
     self.crop = crop 
    } 
} 

und wie dies in den viewDidLoad() mein Projekt:

let tgImageURL = TGImage(url: "http://media.gettyimages.com/photos/model-walks-the-runway-at-the-tory-burch-fw17-show-during-new-york-picture-id635259314", crop: CGRect(x: 0, y: 0, width: 499, height: 358)) 

Mein Server nimmt in dieser Struktur und gibt json zurück, aber ich weiß nicht, wie ich es auf den Server hochladen soll. Das ist, was ich bisher für die Funktion auf der Rahmenseite der Dinge:

public func detectBoxes(image: TGImage) { 

    let user = "key_wcjRv0QAasd76W83tZHrIH1Y70U" 
    let password = "" 

    var headers: HTTPHeaders = ["Content-Type" : "application/json"] 

    if let authorizationHeader = Request.authorizationHeader(user: user, password: password) { 
     headers[authorizationHeader.key] = authorizationHeader.value 
    } 

    Alamofire.request("http://api-dev.websiteURL.co/v1/prediction/tag", headers: headers) 
     .responseJSON { response in 
      debugPrint(response) 
    } 
} 

und auf der Projektseite:

tg.detectBoxes(image: tgImageURL) 
+0

1. zu verwenden, das Format zu verwenden planen, die Struktur auf den Server zu senden? Der Inhaltstyp Ihrer Anfrage ist JSON 2. Ich sehe keine Verwendung von Image in detectBoxes - es scheint mir, dass Sie Ihre Struktur in JSON-String transformieren und dann an den Server senden sollten –

+0

@inspector_60 muss ich wirklich transformieren zu JSON? Könnte ich möglicherweise die URL und ein Array von 4 Zahlen hochladen, die die "crop" Variable aka (width, height, x, y) repräsentieren? Ich habe wirklich nach der akutalen Funktion gefragt. Wie würde ich den tatsächlichen Code implementieren –

+0

Es hängt von Ihrer Serverimplementierung ab, der Client und der Server müssen sich auf eine gemeinsame "Sprache" und normalerweise JSON oder XML einigen, so dass Sie Ihr Objekt zu JSON oder XML serialisieren müssen. Es scheint in Ihrem Code, dass es JSON sein sollte. Jede Art der Serialisierung Ihrer Struktur ist keine schwierige Aufgabe, Sie können die JSON-Serialisierung verwenden, die ein wenig umständlich ist (auf Swift 4 wurde verbessert) oder Open Source-Bibliothek wie SwiftyJSON [link] (https://github.com/SwiftyJSON/SwiftyJSON) –

Antwort

1

Ihr Client und Server muss auf einer gemeinsamen „Sprache“ vereinbaren und normalerweise ist es JSON oder XML, also müssen Sie Ihr Objekt zu JSON oder XML serialisieren. In Ihrem Code scheint es JSON zu sein, da Sie in der Kopfzeile angegeben haben, dass der Inhaltstyp JSON ist. (und niemand benutzt wirklich xml mehr)

Sie müssen auch zustimmen (mit Server), welche HTTP - Methode (Post oder Get) der Server erwartet, dass Sie dies verwenden wird bestimmen, wo Sie die Daten senden (post methode - on Körper oder get Methode - auf Header)

verwenden Alamofire's json-encoding Dokumentation Beispiele und Anweisungen zu sehen, wie richtig die Anfrage zu senden (mit post)

Jede Art und Weise, Ihre struct Serialisierung nicht schwierige Aufgabe ist, kann Sie verwenden Swift baut es JSON-Serialisierung mit NSJSONSerialization, die ein bisschen sperrig ist mich oder benutzen Open-Source-Bibliothek wie SwiftyJSON

Hier ist ein Beispiel dafür, wie NSJSONSerialization

func Serialization(object: AnyObject) -> String{ 
    do { 
     let stringData = try NSJSONSerialization.dataWithJSONObject(object, options: []) 
     if let string = String(data: stringData, encoding: NSUTF8StringEncoding){ 
      return string 
     } 
    }catch _ { 

    } 
    return "{\"element\":\"jsonError\"}" 
} 
Verwandte Themen