我想知道为什么我不能将文件作为参数值之一并在 Alamofire 中将参数作为上传请求发送。我尝试了这样的方法并且有效。
let parameters: [String : AnyObject ] = [
"email" : "abc@gmail.com",
"password" : "password",
"full_name": "XXX"]
let image: UIImage? = UIImage(named: "logo.png")
Alamofire.upload(
.POST,
"http://myurl.com/register",
multipartFormData: { multipartFormData in
for (key, value) in parameters {
multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
}
if let imageData = UIImageJPEGRepresentation(image!, 1) {
multipartFormData.appendBodyPart(data: imageData, name: "profile_pic", fileName: "logo.png", mimeType: "image/png")
}
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .Failure(let encodingError):
print(encodingError)
}
}
)
为什么我不能将图像作为参数值传递?还有为什么我需要更改 UIImageJPEGRepresentation 中的图像。
如果我将图像作为值传递而不更改表示形式,则会抛出错误,表明它不是 NSData
格式。
请注意,无论是否有图像,请求都应该通过,因为它是可选的。
最佳答案
如您所知,Alamofire
只是一个帮助您处理 NSURLRequest
的库。这是客户端通过 HTTP 请求与服务器通信的常见方式。其他平台(例如 Android、桌面或 Web...)也使用这种方式。所以它们必须是相同的格式。 post body
只接受简单的数据格式,如 String、Int 或 byte[]...它不知道什么是 UIImage
,而是 NSData
. NSData 是 byte[] 的一种格式。
因此,如果您想上传文本文件或视频,也必须将其转换为 NSData
。
希望这有帮助。
关于ios - 为什么我无法将文件作为 Alamofire 中的参数值之一附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788401/