使用 multipartFormData 上传图像时 Alamofire 请求正文为零
Posted
技术标签:
【中文标题】使用 multipartFormData 上传图像时 Alamofire 请求正文为零【英文标题】:Alamofire request body nil when uploading image using multipartFormData 【发布时间】:2018-08-09 12:36:02 【问题描述】:我似乎在使用 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 始终为零,这对应于我从服务器收到的错误,并且消息说我没有传递必需的参数。
【问题讨论】:
【参考方案1】:这对我有用 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
// Base64EncodedString
func toBase64EncodedString(_ jsonString : String) -> String
let utf8str = jsonString.data(using: .utf8)
let base64Encoded = utf8str?.base64EncodedString(options: [])
return base64Encoded!
【讨论】:
@VadimF。抱歉,亲爱的回复晚了,请检查更新的答案我已经添加了 toBase64EncodedString 函数,如果您有任何其他问题,请随时在此处发表评论 :)以上是关于使用 multipartFormData 上传图像时 Alamofire 请求正文为零的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire multipartFormData 上传不发送数据
Play Framework - 上传文件后响应 JSON (multipartFormData)
如何使用 Alamofire 上传具有身份验证的 MultipartFormData
Alamofire,使用参数中的结构上传 MultipartFormData