我似乎对使用Alamofire上传图片和传递参数存在问题。对于多部分数据,我有一个非常简单的功能,如下所示:
sessionManager.upload(multipartFormData: { (multipartFormData) in
for (key, value) in parameters {
print("\(value)")
multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
}
multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "document", mimeType: "image/png")
}, to: baseURL + "/documents", encodingCompletion: { (result) in
switch result{
case .success(let upload, _, _):
upload.validate().responseJSON { response in
print("Succesfully uploaded")
}
case .failure(let error):
print("Error in upload: \(error.localizedDescription)")
}
})
我有OAuth2Handler,它已经实现了标题和授权,并且可以用于所有其他请求。我也尝试过直接使用Alamofire对象在不使用包装的情况下实现此功能,但是仍然没有运气。当我检查请求时,我注意到httpBody始终为nil,这与我从服务器收到的错误相对应,并且消息显示我未传递必需的参数。
答案 0 :(得分:0)
这对我有用 Swift 4
func callPostApiImage(api:String, parameters:[String:AnyObject]?,image:UIImage,Name:String, mime_type:String = "image/jpg", complition:@escaping (AnyObject)->Void){
// Encode Data
let base64EncodedString = toBase64EncodedString(toJsonString(parameters: parameters!))
let File_name = "image_" + String(arc4random()) + ".jpg"
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(UIImageJPEGRepresentation(image, 0.5)!, withName: Name, fileName: File_name, mimeType: mime_type)
multipartFormData.append(base64EncodedString.data(using: String.Encoding.utf8)!, withName: "jsondata")
}, to:api){ (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (progress) in
print(progress)
})
upload.responseJSON { response in
print(response.result)
}
case .failure(let encodingError):
print("",encodingError.localizedDescription)
break
}
}
}