【问题标题】:Alamofire, uploading MultipartFormData with struct in parametersAlamofire,使用参数中的结构上传 MultipartFormData
【发布时间】: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"),有使用简单结构的情况,有使用复杂结构的情况

标签: swift swift3 alamofire swifty-json


【解决方案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],将其附加到“参数”,然后您就可以开始了。
猜你喜欢
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 2019-08-11
  • 2019-03-04
  • 2017-12-17
  • 2019-11-07
相关资源
最近更新 更多