Ios 如何使用Swift中的Alamofire在多部分文件上载中传递正文参数和文件

Ios 如何使用Swift中的Alamofire在多部分文件上载中传递正文参数和文件,ios,swift,ios9,alamofire,Ios,Swift,Ios9,Alamofire,我正在Swift的Alamofire库中进行多部分文件上传。我需要随文件一起传递一些参数。以下是我需要传递到服务器的正文: { "eventId":7, "eventImageList":[ { "contentType":"png", "imageName":"test", "imagePath":"" } , { "contentType":"png", "imageName":"test2", "imagePath":"" } ] } 我尝试过类似的方

我正在Swift的Alamofire库中进行多部分文件上传。我需要随文件一起传递一些参数。以下是我需要传递到服务器的正文:

{
  "eventId":7,
  "eventImageList":[
    { "contentType":"png", "imageName":"test", "imagePath":"" }
    ,
    { "contentType":"png", "imageName":"test2", "imagePath":"" }
  ]
}
我尝试过类似的方法:

let image = UIImage(named: "sampleImage")

Alamofire.upload(.POST, URL, multipartFormData: {
    multipartFormData in
        if let _image = image {
            if let imageData = UIImageJPEGRepresentation(_image, 0.5) {
                multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.png", mimeType: "image/png")
            }
        }
        for (key, value) in dictionary {
            multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key as! String)
        }

    }, encodingCompletion: {
        encodingResult in

        switch encodingResult {
        case .Success(let upload, _, _):
            upload.responseJSON { response in

                switch response.result {
                case .Success:
                     print("jsonResponse ==== ", response)
                case .Failure(let error):
                     print("error ==== ", error)
                }
            }
        case .Failure(let encodingError):
            print(encodingError)
        }
})
我需要传递此数组:

[
  { "contentType":"png", "imageName":"test", "imagePath":"" }
  ,
  { "contentType":"png", "imageName":"test2", "imagePath":"" }
]  
但当我像下面这样解码时,应用程序崩溃了

multipartFormData.appendBodyPart(data:value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
从更改代码

for (key, value) in dictionary {
    multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key as! String)
}
为此:

for (key, value) in parameters {
    multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
}

这对我来说很有用。

当我试图上传一个带有类似参数(字典中的字典)的图像(Alamofire)时,我遇到了这个问题

下面是一个例子:

let params:[String:Any] = ["client" : ["name" : "Some", "email" : "some@some.com"]]
for (key, value) in (params["client"] as! [String:Any]) {
     multipartFormData.append((value as! String).data(using: String.Encoding.utf8)!, withName: "client[\(key)]")
 }
诀窍在于这一部分:

withName: "client[\(key)]"

可能重复的不是重复的,我需要传递一个数据数组作为参数,但当我尝试此multipartFormData.appendBodyPart(数据:value.dataUsingEncoding(NSUTF8StringEncoding)!,name:key as!String)应用程序崩溃时,此代码可能会回答问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。如果不起作用,我们是否可以打印multipartFormData以检查我们发送的值?