为啥我不能将文件附加为 Alamofire 中的参数值之一?
Posted
技术标签:
【中文标题】为啥我不能将文件附加为 Alamofire 中的参数值之一?【英文标题】:Why can't I append the file as one of the parameter value in Alamofire?为什么我不能将文件附加为 Alamofire 中的参数值之一? 【发布时间】:2016-04-22 08:10:23 【问题描述】:我想知道为什么我不能将文件作为参数值之一并在 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
格式。
请注意,无论是否有图像,请求都应该通过,因为它是可选的。
【问题讨论】:
您在尝试使用参数时遇到的错误是什么? 说UIImage is not sent to an instance of type String
我需要将图像的值存储在参数中,并通过 for 循环 本身中的可选链接检查图像是否可用。但在这里我正在检查图像是否可用,分别。你能明白我想表达什么吗?!
【参考方案1】:
如您所知,Alamofire
只是一个帮助您处理NSURLRequest
的库。这是客户端通过 HTTP 请求与服务器通信的常用方式。其他平台(例如 android、Desktop 或 Web...)也使用这种方式。所以它们必须是相同的格式。 post body
只接受String、Int、byte[]等简单的数据格式……不知道UIImage
是什么,而是NSData
。 NSData 是 byte[] 的格式。
因此,如果您要上传文本文件或视频,您也必须将其转换为 NSData
。
希望对您有所帮助。
【讨论】:
谢谢你!你澄清了我的疑问!!但是你能回答我对 zcui93 评论的问题吗?! 我不知道你想要什么:)以上是关于为啥我不能将文件附加为 Alamofire 中的参数值之一?的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Alamofire 4.0 中使用类型为“(String,withName:String)”的参数列表调用“附加”
我正在通过使用 UITextField 获取输入来使用字符串中的特殊字符进行 api 调用,但 alamofire 会自动将其更改为一些代码