2017-08-24 3 views
1

Ich versuche, Post-Anfrage mit Wörterbuch zu senden, einer der Werte ist base64 string. Also, ich habe Parameter DIKT wie folgt:Send base 64 string mit alomofire

let paramsDict : [String : Any] = [ "image" : self.avatarBase64String] 

Wenn ich eine Anfrage schicken, ich habe folgendes in der Konsole:

AUSFALL: responseSerializationFailed (Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed (Error Domain = NSCocoaErrorDomain-Code = 3840 "Ungültige Wert um Zeichen 0" Userinfo = {NSDebugDescription = Unzulässiger Wert um Zeichen 0}))

Meine Base64-Zeichenfolge ist korrekt (ziemlich viele Symbole), aber ich habe es online überprüft und ein Bild von der Ausgabe erhalten.

Warum habe ich einen solchen Fehler?

+1

Der Fehler erwähnt "Antwort". Der Server sendet Ihnen möglicherweise etwas anderes als JSON. Können Sie die Antwort als Rohdaten oder als Zeichenfolge ausgeben? – Mats

+0

@Ahmad F Problem ist gelöst. Vielen Dank. –

+0

@EvgeniyKleban froh zu helfen! alles, was ich tat, war die Bearbeitung der Antwort :) –

Antwort

1

Überprüfen Sie Ihre Netzwerkverbindung. Dann wandeln Sie die imageView in Daten und dann in Base64 konvertieren

Hoffnung dieser Code wird Ihnen helfen: -

let pic = UIImageJPEGRepresentation(cameraView.image, 0.5) 
let avatarBase64String = pic.base64EncodedString() 
+0

danke für Ihre Hilfe, die Arbeit –

1

Hier ist, was ich zu machen, um einfach Wörterbuch Darstellung Ihrer Parameter wurden unter Verwendung der in um eine POST-Anfrage mit Alamofire zu machen.

Sie dies in Ihrer Modellklasse verwenden können:

var dictionaryRepresentation: [String: Any] { 

     return [ 
      "name" : self.name, 
      "title" : self.title, 
      "avatar" : self.avatar, 
      "age" : self.age, 
     ] 
    } 

Sie können das selbst entfernen, wenn Sie in Ihrer Modellklasse sind, ist es nur für ein besseres Verständnis.

Und dann, wenn Sie Ihre POST-Anfrage machen möchten, können Sie es auf diese Weise nennen:

Stellen Sie eine Klasse Benutzer haben, mit Attributnamen, Titel, Avatar und Alter, wie zuvor gezeigt.

Und Sie möchten Ihr Objekt Benutzer an Ihr Backend senden.

Hier ist, wie Sie Ihre Parameter als Wörterbuch vertreten senden:

let user = User(name: name, title: title, avatar: avatar; age: age) 

CustomService.shared.post(parameters: user.dictionaryRepresentation) { response in 
    // Handle response here 
} 

ich Ihnen dringend, in einem Shared-Service-Klasse alle Netzwerk Methoden zu abstrahieren empfehlen.