我想知道为什么我不能将文件作为参数值之一,并将参数作为上传请求发送到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
格式。
请注意,即使有图像,请求也应该通过,因为它是可选的。
答案 0 :(得分:0)
如您所知,Alamofire
只是一个图书馆,可以帮助您处理NSURLRequest
。这是客户端可以通过HTTP请求与服务器通信的常用方法。其他平台(如Android,桌面或Web ......)也使用这种方式。所以它们必须是相同的格式。 post body
只接受简单的数据格式,如String,Int或byte [] ......它不知道什么是UIImage
,而是NSData
。 NSData是byte []的格式。
因此,如果您要上传文字文件或视频,则必须将其转换为NSData
。
希望得到这个帮助。