ios - 如何使用 [String : Any] parameters 构造多部分表单数据请求

标签 ios swift post multipartform-data

我找到了这个代码https://github.com/Kilo-Loco/URLSessionMPFD它构造了多部分表单数据,但这在参数为[String: String]时有效。我的参数是[String: Any]。如何使用[String: Any]制作它?

我只看到相关代码,我希望它足以理解我的问题。

typealias Parameters = [String: String]

func construct() {
    //let parameters = ["name": "MyTestFile123321","description": "My tutorial test file for MPFD uploads"]

    let parameters: [String : Any] = [
            "APIKey":apiKey,"accessToken":accessToken,
            "user":["email":emailTextField.text!],
            "profile":["name":nameTextField.text!,"dob":dateOfBirthTextField.text!
        ]

    let dataBody = createDataBody(withParameters: parameters, media: [mediaImage], boundary: boundary)

}
func createDataBody(withParameters params: Parameters?, media: [Media]?, boundary: String) -> Data {

    let lineBreak = "\r\n"
    var body = Data()

    if let parameters = params {
        for (key, value) in parameters {
            body.append("--\(boundary + lineBreak)")
            body.append("Content-Disposition: form-data; name=\"\(key)\"\(lineBreak + lineBreak)")
            body.append("\(value + lineBreak)")
        }
    }

    if let media = media {
        for photo in media {
            body.append("--\(boundary + lineBreak)")
            //...
        }
    }

    body.append("--\(boundary)--\(lineBreak)")

    return body
}

extension Data {
    mutating func append(_ string: String) {
        if let data = string.data(using: .utf8) {
            append(data)
        }
    }
}

最佳答案

我尝试在您提到的 github 项目中使用以下参数。

 // Try using this modified parameter in github project
  let parameters = ["user": ["name": "MyTestFile123321",
                               "description": "My tutorial test file for MPFD uploads"],"profile": ["title": "This is big title"]] as [String : Any]

我已使用 [String:Any] 更新代码

typealias Parameters = [String: Any]

func construct() {

    // Change it with it your parameter

     let parameters = ["user": ["name": "MyTestFile123321",
                               "description": "My tutorial test file for MPFD uploads"],"profile": ["title": "This is big title"]] as [String : Any]

     let dataBody = createDataBody(withParameters: parameters, media: [mediaImage], boundary: boundary)

}
func createDataBody(withParameters params: Parameters?, media: [Media]?, boundary: String) -> Data {

    let lineBreak = "\r\n"
    var body = Data()

      if let parameters = params {

        for (key, value) in parameters {

            if let sValue = value as? String {
                body.append("--\(boundary + lineBreak)")
                body.append("Content-Disposition: form-data; name=\"\(key)\"\(lineBreak + lineBreak)")
                body.append("\(sValue + lineBreak)")
            }else{
                if let dictionaryObj = value as? [String : String] {
                    for (key, value) in dictionaryObj {
                        body.append("--\(boundary + lineBreak)")
                        body.append("Content-Disposition: form-data; name=\"\(key)\"\(lineBreak + lineBreak)")
                        body.append("\(value + lineBreak)")
                    }
                }
            }


        }
    }

    if let media = media {
        for photo in media {
            body.append("--\(boundary + lineBreak)")
            //...
        }
    }

    body.append("--\(boundary)--\(lineBreak)")

    return body
}

extension Data {
    mutating func append(_ string: String) {
        if let data = string.data(using: .utf8) {
            append(data)
        }
    }
}

希望对您有帮助。 :)

关于ios - 如何使用 [String : Any] parameters 构造多部分表单数据请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394129/

相关文章:

ios - 如何关闭应用程序内 ios 短信的消息窗口

swift - 与功能和属性相关的性能影响

ios - 圆角半径图像 Swift

swift - 将自定义 key 添加到 info.plist,当我从 Swift 中的 Playground 访问时,它是零

java - 为什么我无法从 java 中的 POST 请求读取正文?

java - POST 到 HTTPS 服务

ios - 错误 : missing context for method declaration with FB SDK on react native

ios - iOS 中的 MUC 使用 robbiehanson XMPP 框架

jQuery ajax()/post() & 成功

ios - Twitter OAuth 1 POST 请求不起作用