2016-08-08 25 views
0

Mein Parameter ist ein [String: AnyObjecy] Wörterbuch und ich verwende Alamofire Upload-Methode, um ein Bild hochzuladen. Wenn ich will, um die Parameter, mit ihm zu übergeben, wobei das Verfahren durch EdFunke vorgeschlagen unter Verwendung von (https://stackoverflow.com/a/33012955/4919289) i die folgenden Fehler auftreten: 'NSInvalidArgumentException' Grund: ‚- [__ NSCFNumber dataUsingEncoding:So laden Sie Parameter mit nicht-string-Wert in Upload-Methode in Alamofire

bei:

for (key, value) in params{ 
     print("before key: \(key)") 
     multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     print("after key:\(key)") 
} 

Ich denke, es ist, weil der Wert in den Wörterbüchern keine Zeichenfolge ist, wie kann ich es lösen?

bei 27/2/2017 mit Swift 3

let params = [ 
     //your params 
    ] as [String : Any] 
    Alamofire.upload(multipartFormData: { (multipartFormData) in 
     multipartFormData.append(self.user.imageData, withName: "your file name", fileName: "your file name with extension", mimeType: "image/jpeg") 
     for (key, value) in params{ 
      print("key,value: \(key),\(value)") 
      let stringValue = value as! String 
      multipartFormData.append(stringValue.data(using: .utf8)!, withName: key) 
     } 
    }, to:"your url") 
    { (result) in 
     switch result { 
     case .success(let upload, _, _): 

      upload.uploadProgress(closure: { (progress) in 
       //Print progress 
       print("Upload Progress: \(progress.fractionCompleted)") 
      }) 
      upload.responseJSON { response in 
       //print response.result 
       print(response.result) 

      } 

     case .failure(let encodingError): 
      print("in faulure") 
      print(encodingError) 
      self.presentAlertView(title: "Error", message: "cannot register", buttonText: "OK") 
      //print(encodingError.description) 
      break 
      //print encodingError.description 
     } 
    } 
+1

In diesem Fall tun kann der Parameter eine Zahl ist ('NSNumber'). Sie könnten die Zeichenfolgendarstellung verwenden. – vadian

+0

@Edison haben Sie keine Lösung für Ihre Frage gefunden, ich möchte komplexe JSON in Params mit Upload-Methode senden, jede Hilfe bitte – Abdel

+0

@Abdel Ich habe meine Frage mit einer Lösung aktualisiert –

Antwort

0

Wenn es ein UIImage ist aktualisieren Sie diesen

for (key, value) in params{ 

    if let image = value as? UIImage { 
     if let imageData: NSData = UIImageJPEGRepresentation(image, 1){ 
      multiPartFormData.appendBodyPart(data: imageData, name: "file", fileName: "key.jpg", mimeType: "image/jpg") 
     } 
    } else { 
     multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
    } 

}