我想使用Alamo fire multipart表单数据使用请求,例如,我使用上传API
let profile = self.photoView.imageView?.image
let parameters : [String:String] = [
"homePageUrl": webURLField.text!,
"nickName": nickNameField.text!,
"selfIntro": introField.text!,
]
let uri = Constants.APIURL.changeProfile
let fileName = "\(nickNameField.text!).jpg"
Alamofire.upload(multipartFormData: { (multipartFormData) in
if let imageData = UIImageJPEGRepresentation(profile!, 1.0) {
multipartFormData.append(imageData, withName: "profile", fileName: fileName, mimeType: "image/jpg")
}
for ( key, value ) in parameters {
multipartFormData.append(value.data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: key)
}
}, usingThreshold: UInt64.init(), to: uri, method: .patch, headers: Constants.VyrlAPIConstants.getHeader(), encodingCompletion:
{
encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (progress) in
})
upload.responseString { response in
if ((response.response?.statusCode)! == 200){
self.navigationController?.popViewController(animated: true)
}
}
case .failure(let encodingError):
print(encodingError.localizedDescription)
}
})
此代码从服务器发送400响应 log is。
PATCH' http://blablabla.com:8080 / users / profile':
内容类型:multipart / form-data; boundary = alamofire.boundary.53a2e440bad1fabd X-Device:ios X-APP-Version:1.0.0 Accept-Language:ko-kr 400 ' HTTP://blablabla.com:8080 /用户/简档' [0.0976 s]: X-Application-Context:应用程序:dev连接:关闭 转移编码:身份日期:星期四,2017年7月13日01:57:41 GMT
服务器想要接收 http://blablabla.com:8080/users/profile?nickName=abcd&selfIntro=hi%20my%20name%20is .. 服务器日志是..(成功200代码)
curl -X PATCH --header' Content-Type:multipart / form-data' --header '接受: / ' --header' X-APP-Version:1.0.0' --Hader' X-Device:ios' --header' Accept-Language:ko-KR' {"输入":" formData"}' http://blablabla.com:8080/users/profile?nickName=abcd&selfIntro=hi%20my% 20name%图20是.. '
当然,我想附加?nicName = abcd 使用multiformpart数据
如何使用alamofire代码?
答案 0 :(得分:1)
请尝试这个,它适用于我的图片上传
var parameters = [String:AnyObject]()
let profile = self.photoView.imageView?.image
parameters = ["homePageUrl": webURLField.text as AnyObject,
"nickName": nickNameField.text as AnyObject,
"selfIntro": introField.text as AnyObject]
let imgData = UIImageJPEGRepresentation(profile!, 0.2)!
let uri = Constants.APIURL.changeProfile
let fileName = "\(nickNameField.text!).jpg"
Alamofire.upload(multipartFormData:{ multipartFormData in
multipartFormData.append(imgData, withName: "profile",fileName: fileName, mimeType: "image/jpg")
for (key, value) in parameters {
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
}
},
usingThreshold:UInt64.init(),
to:uri,
method:.post,
headers:Constants.VyrlAPIConstants.getHeader(),
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
print(response.result.value)
}
case .failure(let encodingError):
print(encodingError)
}
})
答案 1 :(得分:0)
如果不起作用,那么使用这样的参数制作url。
Alamofire.upload(multipartFormData:{ multipartFormData in
multipartFormData.append(imgData, withName: "profile",fileName: fileName, mimeType: "image/jpg")},
usingThreshold:UInt64.init(),
to:uri + "?" +nickNameField.text! +"?"+ webURLField.text!+"?"+introField.text!,
method:.post,
headers:Constants.VyrlAPIConstants.getHeader(),
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
print(response.result.value)
}
case .failure(let encodingError):
print(encodingError)
}
})
答案 2 :(得分:0)
在Swift 3 Alamofire 4中
这是参考的演示代码
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(UIImageJPEGRepresentation(self.Imgprofile.image!, 1)!, withName: "Prescription", fileName: "Profile_Image.jpeg", mimeType: "image/jpeg")
}, to:" Your URL here ")
{ (result) in
switch result {
case .success(let upload, _, _):
print(result)
upload.uploadProgress(closure: { (progress) in
print(progress)
})
upload.responseJSON { response in
//print response.result
print(response);
}
case .failure(let encodingError):
print(encodingError);
}
}
}
希望这应该有效
由于