[英]Alamofire Multipart request
我是快速编程的新手。 我正在尝试通过 alamofire 进行多部分请求。问题是我的参数中的一个值是对象数组。 我的问题是如何将对象数组附加到 Multipart 请求。 这是我的参数。
let parameters = [
"originguid":"63d6sd5",
"signees":[Signess], //Here is issue "signees"is an array of objects
"customer":"yes"
] as [String : Any]
这是我的要求
Alamofire.upload(
.POST,
URLString: myUrl,
multipartFormData: { multipartFormData in
if let img = self.imagePicked {
multipartFormData.append(UIImageJPEGRepresentation(img, 0.2)!, withName: "fileset",fileName: "file.png", mimeType: "image/jpg")
}
if let file = self.filePicked{
let fileData = try! Data(contentsOf: file)
multipartFormData.append(fileData as Data, withName:"test.pdf", mimeType:"application/pdf")
}
for (key, value) in parameters {
if key == "signees"{
multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
}
else{
multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
}
}
},
...
)
将签名者附加到多部分请求时应用程序崩溃。 这是我在参数中使用的对象。
class Signee: NSObject, NSCoding {
var name = ""
var email = ""
var phoneNo = ""
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
aCoder.encode(email, forKey: "email")
aCoder.encode(phoneNo, forKey: "phoneNo")
}
init(name: String, email: String, phone: String) {
self.name = name
self.email = email
self.phoneNo = phone
}
required convenience init(coder aDecoder: NSCoder) {
let name = aDecoder.decodeObject(forKey: "name") as! String
let email = aDecoder.decodeObject(forKey: "email") as! String
let phoneNo = aDecoder.decodeObject(forKey: "phoneNo") as! String
self.init(name: name, email: email, phone: phoneNo)
}}
请帮忙。 提前致谢,我浪费了两天时间尝试不同的事情。
多部分与 Alamofire
let headerDic: HTTPHeaders = [ "YOUR_HEADER_DIC" ]
let paramDic: Parameters = [ "YOUR_PARAMETER_DIC" ]
Alamofire.upload(multipartFormData: { (MultipartFormData) in
MultipartFormData.append("YOUR_IMAGEDATA", withName: "YOUR_IMAGE_PARAMETER_NAME", fileName: "YOUR_IMAGENAME", mimeType: "image/jpeg")
for (key, value) in paramDic {
MultipartFormData.append(((value as AnyObject).data(using: String.Encoding.utf8.rawValue))!, withName: key)
}
}, to: "YOUR_WEBSERVICE_NAME", method: .post, headers: headerDic) { (result) in
switch result {
case .success(let upload, _, _):
upload.responseJSON { response in
if let value = response.result.value {
let responseDic: NSDictionary = value as! NSDictionary
"YOUR_WEB_RESPONSE_SUCCESS_MESSEGE"
} else {
"YOUR_WEB_RESPONSE_ERROR_MESSEGE"
}
}
}
case .failure(let encodingError):
var messege: String = String()
if encodingError.localizedDescription.characters.count <= 0 {
messege = "Please check your Internet Conneciton!"
} else {
messege = encodingError.localizedDescription
}
print("Error Messege:\(messege)")
}
}
使用almofire
多部分请求
数据发送到多部分
struct AGImageInfo {
var fileName: String
var type: String
var data: Data
}
请求
let header: HTTPHeaders = [
"Content-Type":"application/x-www-form-urlencoded"
]
let parameters: Parameters = [
"someParam": "value",
"Image": AGImageInfo(fileName: "nameOfImage.jpeg", type: "image/jpeg", data: #imageLiteral(resourceName: "TO").toData()!)
]
Alamofire.upload(multipartFormData: { (multipartFormData) in
for (key, value) in parameters {
if let imageData = value as? AGImageInfo {
multipartFormData.append(imageData.data, withName: key, fileName: imageData.fileName, mimeType: imageData.type)
}
multipartFormData.append(((value as AnyObject).data(using: String.Encoding.utf8.rawValue))!, withName: key)
}
}, to: "URL", method: .post, headers: header) { (result) in
switch result {
case .success(let upload, _, _):
upload.responseJSON { response in
switch response.result {
case .success(let value):
debugPrint(value)
break
case .failure(let error):
debugPrint(error)
break
}
}
case .failure(let error):
debugPrint(error)
break
}
}
struct File {
var data: Data
var name: String
var mimeType: String
}
.upload(
multipartFormData: { multipartFormData in
for (key, value) in yourDictionnary {
if let file = value as? File {
multipartFormData.append(
file.data,
withName: key,
fileName: file.name,
mimeType: file.mimeType
)
} else {
multipartFormData.append(
(value as AnyObject).data(using: String.Encoding.utf8.rawValue)!,
withName: key
)
}
}
},
to: "Your URL"
)
不要忘记 else 情况,因为你将进入 if 和第二个multipart.append你会得到这样的错误 '-[Swift._SwiftDeferredNSArray dataUsingEncoding:]: unrecognized selector sent to instance 0x1c4421fa0'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.