Ios 如何使用Alamofire multipart从使用swift 4的数据发送参数中的数组

Ios 如何使用Alamofire multipart从使用swift 4的数据发送参数中的数组,ios,arrays,swift3,multipartform-data,alamofireimage,Ios,Arrays,Swift3,Multipartform Data,Alamofireimage,我正在使用Alamofire将图像和文件上传到服务器。但我在发送带有图像的参数数组时遇到了一个问题。但是,当我以params形式发送数组时,它会将数组转换为JSONstring。但是我想用params发送一个数组,而不是JSONstring。我搜索了很多,但没有找到任何解决方案。下面是代码 let params = ["id":"101","arrayParam":["1232","12344","14325"]] let url = www.khxjjhdfsj.com/hsdgs

我正在使用Alamofire将图像和文件上传到服务器。但我在发送带有图像的参数数组时遇到了一个问题。但是,当我以params形式发送数组时,它会将数组转换为
JSON
string。但是我想用params发送一个数组,而不是
JSON
string。我搜索了很多,但没有找到任何解决方案。下面是代码

let params = ["id":"101","arrayParam":["1232","12344","14325"]]

    let url = www.khxjjhdfsj.com/hsdgs
            let headers: HTTPHeaders = [
                /* "Authorization": "your_access_token",  in case you need authorization header */
                "Content-type": "multipart/form-data"
            ]
            Alamofire.upload(multipartFormData: { (multipartFormData) in
                for (key, value) in params
                {
                     multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
                }
                if let data = imageData
                {
                    multipartFormData.append(data, withName: "file", fileName: fileName, mimeType: "image/png")
                }
                if let data = pdfData
                {
                    multipartFormData.append(data, withName: "file", fileName: fileName, mimeType:"application/pdf")
                }
            }, usingThreshold: UInt64.init(), to: url, method: .post, headers: headers) { (result) in
                switch result{
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        print("Succesfully uploaded")
                        if let err = response.error
                        {
                            onError?(err)

                            return
                        }



                    }
                case .failure(let error):
                    print("Error in upload: \(error.localizedDescription)")
                    onError?(error)
                   }
            }

你能试试这个吗,也许你会

var dict = Data()
    let params:[String:Any] = ["id":"101","arrayParam":["1232","12344","14325"]]

for (key, value) in params {
    if key == "arrayParam" {
    if let str:[String] = value as? [String]{
          // to convert [String] to data
          dict = Data(buffer: UnsafeBufferPointer(start: str, count: str.count))
         // to retrive [String] from data
        let arr2 = dict.withUnsafeBytes {
            Array(UnsafeBufferPointer<String>(start: $0, count: dict.count/MemoryLayout<String>.stride))
        }
        print(arr2)
    }
    }
    multipartFormData.append(dict, withName: key)
    }
var dict=Data()
let参数:[String:Any]=[“id”:“101”,“arrayParam”:[“1232”,“12344”,“14325”]]
用于参数中的(键、值){
如果键==“arrayParam”{
如果让str:[String]=值为?[String]{
//将[字符串]转换为数据
dict=Data(缓冲区:UnsafeBufferPointer(开始:str,计数:str.count))
//从数据中检索[字符串]
设arr2=dict.withUnsafeBytes{
数组(UnsafeBufferPointer(开始:$0,计数:dict.count/MemoryLayout.stride))
}
打印(arr2)
}
}
multipartFormData.append(dict,with name:key)
}

我没有看到任何被接受的答案,所以请分享我的解决方案。它已经过测试,正在运行

let arrayObj = value as !Array<Any>
for i in 0..< arrayObj.count {
    let value = arrayObj[i] as !String
    let keyObj = key + "[" + String(i) + "]"
    form.append(value.data(using: String.Encoding.utf8)!, withName: keyObj)
}
让arrayObj=值为!排列
对于0中的i..
您必须发送“arrayParam”作为参数吗?还是整个参数?@chandra1234我会发送“arrayParam”作为参数。你可以用这行试试。“arrayParam[(键)]”而不是仅添加key@chandra1234-你能用代码解释一下吗?你找到解决方案了吗@Deevakarverma@Deevakarverma我更新了我的答案,请检查,这样你将只附加数组。
let arrayObj = value as !Array<Any>
for i in 0..< arrayObj.count {
    let value = arrayObj[i] as !String
    let keyObj = key + "[" + String(i) + "]"
    form.append(value.data(using: String.Encoding.utf8)!, withName: keyObj)
}