Alamofire,使用参数中的结构上传 MultipartFormData

Posted

技术标签:

【中文标题】Alamofire,使用参数中的结构上传 MultipartFormData【英文标题】:Alamofire, uploading MultipartFormData with struct in parameters 【发布时间】:2017-02-15 21:15:43 【问题描述】:

上传MultipartFormData时如何在参数中添加struct:

let parameters = [
"parameter1": "test1",
"parameter2": "test2"]

Alamofire.upload(multipartFormData:  multipartFormData in
        for (key, value) in parameters 
            multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
        
        multipartFormData.append(structObject, withName: "user")

      if let imageData = UIImageJPEGRepresentation(image, 1) 
      multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.png",      mimeType: "image/png")
    
    , to: url, encodingCompletion:  encodingResult in
        switch encodingResult 
        case .success(let upload, _, _):
            upload.responseJSON  response in
                if let value = response.result.value as AnyObject?
                    let json = JSON(value)
                 else 

                                    
            
        case .failure(let encodingError):
            print(encodingError)

        
    
    )

我可以添加额外的参数没有任何问题,但我不能将对象添加到参数数组

谢谢

【问题讨论】:

你的struct在哪里? multipartFormData.append(structObject, withName: "user"),有使用简单结构的情况,有使用复杂结构的情况 【参考方案1】:

在 multipartFormData 下方添加以下内容以在参数映射之间循环并附加参数键和值:

let parameters = [
"parameter1": "test1",
"parameter2": "test2"]

Alamofire.upload(multipartFormData:  multipartFormData in
        multipartFormData.append(structObject, withName: "user")

      if let imageData = UIImageJPEGRepresentation(image, 1) 
      multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.png",      mimeType: "image/png")
      for (key, value) in parameters 
           multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
      
    
    , to: url, encodingCompletion:  encodingResult in
        switch encodingResult 
        case .success(let upload, _, _):
            upload.responseJSON  response in
                if let value = response.result.value as AnyObject?
                    let json = JSON(value)
                 else 

                                    
            
        case .failure(let encodingError):
            print(encodingError)

        
    
    )

【讨论】:

问题是我不能追加structObject 这里的“structObject”是什么?我看不到在哪里声明 这是一个简单的结构 我不明白你为什么要使用结构而不是 alamofire“参数”。也许您可以创建一个循环将数据从结构传递到参数映射。 然后你应该创建一个辅助函数,用该数据生成一个 [String: String]。但是你不能发送一个结构,你只能发送经典的 Alamofire “参数”。因此,我对此的回答是创建一个返回 [String:String] 的辅助函数,并将该映射附加到“参数”映射。使该函数接收产品详细信息、用户信息和您需要的所有内容,但请务必返回一个 [String:String],将其附加到“参数”,然后您就可以开始了。

以上是关于Alamofire,使用参数中的结构上传 MultipartFormData的主要内容,如果未能解决你的问题,请参考以下文章

带有 MultiPart 表单数据中的参数的图像上传在 Alamofire 4.0 中不起作用

无法使用 alamofire 4 上传带参数的图像?

使用 Alamofire 上传图像的问题(将图像作为参数)

使用 Alamofire swift 4 上传文件

alamofire上传带json参数的图片

Alamofire上传multipartFormData忽略参数