【问题标题】:How to send Nested Array parameter using alamofire's Multipart form data如何使用 alamofire 的 Multipart 表单数据发送嵌套数组参数
【发布时间】:2016-11-20 06:37:15
【问题描述】:

如何将此参数发送到多部分

    let dictionary = [
        "user" :
            [
                "email" : "\(email!)",
                "token" : "\(loginToken!)"
        ],
        "photo_data" :[
            "name" : "Toko Tokoan1",
            "avatar_photo" : photo,
            "background_photo" : photo,
            "phone" : "0222222222",
            "addresses" :[[
                "address" : "Jalan Kita",
                "provinceid" : 13,
                "cityid" : 185,
                "postal" : "45512"
                ]],
            "banks" :[[
                "bank_name" : "PT Bank BCA",
                "account_number" : "292993122",
                "account_name" : "Tukiyeum"
                ]]

        ]

    ]

我尝试了下面的代码,但我无法将值(在 NSDic 中)编码为 utf 8

        for (key, value) in current_user {
            if key == "avatar_photo" || key == "background_photo"{
            multipartFormData.appendBodyPart(fileURL: value.data(using: String.Encoding.utf8)!, name: key) // value error because its NSDic
            }else{
             multipartFormData.appendBodyPart(data: value.data(using: String.Encoding.utf8)!, name: value) // value error because its NSDic
            }

        }

value 不能使用附加正文部分,因为它是 NSDictionary 而不是字符串。如何将该参数放入 multipartformdata 的正确方法?

【问题讨论】:

    标签: swift multidimensional-array alamofire multipartform-data


    【解决方案1】:

    允许嵌套多部分。

    明确允许在另一个多部分实体内的正文部分中使用多部分的 Content-Type。在这种情况下,出于显而易见的原因,必须注意确保每个嵌套的多部分实体必须使用不同的边界分隔符。

    RFC 1341

    因此,您必须执行与外部循环相同的操作:简单地遍历字典的内容以生成键值对。显然,您必须设置不同的部分分隔符,以便客户端可以区分嵌套部分更改和*部分更改。

    也许将整个结构作为 application/json 发送会更容易。

    【讨论】:

    • Maybe it is easier to send the whole structure as application/json. 是的。