ios - 如何在 Swift 中使用 Alamofire 将正文参数与文件一起传递到多部分文件上传中

标签 ios swift ios9 alamofire

我正在使用 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)

最佳答案

当我尝试上传带有类似参数(字典中的字典)的图像(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)]"

关于ios - 如何在 Swift 中使用 Alamofire 将正文参数与文件一起传递到多部分文件上传中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33150553/

相关文章:

ios - ScrollView和ImageView-多次旋转设备后图像未居中

ios - 当我滚动 TableView 时,UItextField 数据消失了——Swift

ipad - 继续使用后,iPad的运行速度变慢并卡住在独立模式下

ios - 在 UICollectionViewCell 中添加 UICollectionView

ios - 如何在 iOS 9 中从电子邮件 URL 打开应用程序?

swift - 在 NSLocalizedString 中设置 tableName 参数时,genstrings 不起作用

ios - 导致错误的闭包 Swift

ios - 使用 PJSIP 连续暂停和启动视频流时应用程序崩溃

ios - 具有渐变边框和圆角的 UIButton

swift - NSCollectionView sizeForItemAt 在尝试引用其集合中的项目时始终返回异常