2017-08-24 1 views
1

Je tente d'envoyer une demande de publication avec dictionnaire, l'un de ses valeurs est base64 chaîne. Donc, j'ai paramètres dict comme suit:Envoyer base 64 chaîne avec alomofire

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

Lorsque j'envoie une demande, je me suis suivante dans la console:

PANNE: responseSerializationFailed (Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed (erreur domaine = code NSCocoaErrorDomain = 3840 "valeur non valide dans le caractère 0." UserInfo = {NSDebugDescription = valeur non valide dans le caractère 0.}))

Ma chaîne base64 est correcte (beaucoup de symboles cependant), mais je l'ai vérifié en ligne et j'ai obtenu une image de la sortie.

Pourquoi j'ai eu une telle erreur?

+1

L'erreur mentionne "réponse". Le serveur peut vous envoyer autre chose que JSON. Pouvez-vous imprimer la réponse en tant que données brutes ou en tant que chaîne? – Mats

+0

@Ahmad F problème est résolu. Merci. –

+0

@EvgeniyKleban heureux de vous aider! tout ce que j'ai fait était de modifier la réponse :) –

Répondre

1

Veuillez vérifier votre connexion réseau. Ensuite, vous convertir le imageView en données, puis convertir en base64

L'espoir de ce code vous aidera à: -

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

merci pour votre aide que ce travail –

1

Voici ce que je l'ai utilisé pour faire la représentation Dictionnaire facile de vos paramètres afin de faire une demande POST avec Alamofire.

Vous pouvez l'utiliser dans votre classe de modèle:

var dictionaryRepresentation: [String: Any] { 

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

Vous pouvez supprimer l'auto si vous êtes dans votre classe de modèle, il est juste pour une meilleure compréhension.

Et puis quand vous voulez faire de votre requête POST, vous pouvez l'appeler ainsi:

Imaginez que vous avez un utilisateur de classe, avec le nom d'attribut, le titre, avatar et l'âge comme indiqué précédemment.

Et vous voulez envoyer votre objet utilisateur à votre backend.

Voici comment vous pouvez envoyer vos paramètres comme dictionnaire représenté:

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

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

Je vous conseille fortement de faire abstraction dans une classe de service partagé toutes les méthodes de mise en réseau.