我是快速编程的新手。我正在尝试通过alamofire进行Multipart请求.Issue是我的参数中的值之一是对象数组。我的问题是如何将对象数组附加到Multipart请求。 这是我的参数。
std::min(int(i), j);
这是我的要求
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)
}
}
},
...
)
请帮忙。提前谢谢,我浪费了两天尝试不同的事情。
答案 0 :(得分:6)
与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)")
}
}
答案 1 :(得分:0)
使用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
}
}
答案 2 :(得分:0)
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:]:无法识别的选择器已发送到实例0x1c4421fa0'