I need to send a MultipartFormData .Post Request using Alamofire 4.
The JSON and File data needs to be sent.
I am having a hard time converting SwiftyJson object to type Data object.
SwiftyJSON looks like this:
var json: JSON = JSON([ "Name" : "Ben", "UserID" : 2, "Username" : "benji"])
Alamofire 4 request looks like this
service.upload(multipartFormData: { (MultipartFormData) in
MultipartFormData.append(userData, withName: "userInfo")
MultipartFormData.append(fileUrl, withName: "File")
}, to: url) { (encodingResult) in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .failure(let encodingError):
print(encodingError)
}
}
My Question is how do I convert SwiftyJson Object to Type Data so I can append it to mutlipartformdata? I have tried following but they do not seem to work and I can not find a solution online:
json.rawData()
json.rawString?.data(using: String.Encoding.utf8)
I found out there is/was a bug with json.rawString in SwiftyJSON stated in link below:
https://github.com/SwiftyJSON/SwiftyJSON/issues/645
Making fields "implicitly unwrapped" will fix this issue:
var data = JSON([
"name": _name.text,
"code": _code.text,
"iconId": _id])
//data.rawString() will return nil
var data = JSON([
"name": _name.text!,
"code": _code.text!,
"iconId": _id])
//data.rawString() will return correct result
After this I can simply use it as follows:
self.service.upload(multipartFormData: { (MultipartFormData) in
MultipartFormData.append((data.rawString()?.data(using: String.Encoding.utf8))!, withName: "trackerInfo")
MultipartFormData.append(fileUrl, withName: "File")
}, to: url) { (encodingResult) in
switch encodingResult {
case .success:
print(encodingResult)
case .failure(let encodingError):
print(encodingError)
}
}