Как отправить массив в параметрах с помощью Alamofire multipart из данных с помощью swift 4

Я использую Alamofire для загрузки изображения и файла на сервер. Но у меня возникла проблема с отправкой массива параметров с изображением. Но когда я отправляю массив в params, он преобразует массив в строку JSON. Но я хочу отправить массив в параметрах, а не в строке JSON. Я много искал, но не нашел решения. Вот код ниже.

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)
                   }
            }

person Deevakar verma    schedule 17.07.2018    source источник
comment
вы должны отправить arrayParam в качестве параметра? или все параметры?   -  person chandra1234    schedule 17.07.2018
comment
@chandra1234 chandra1234 я отправлю arrayParam в качестве параметра   -  person Deevakar verma    schedule 17.07.2018
comment
Можете ли вы попробовать с этой строкой . arrayParam[(key)] вместо добавления только ключа   -  person chandra1234    schedule 17.07.2018
comment
@ chandra1234 - можете ли вы объяснить это с помощью кода?   -  person Deevakar verma    schedule 17.07.2018
comment
Вы нашли решение? @Деевакарверма   -  person Muneeb Rehman    schedule 03.02.2021


Ответы (2)


Можете ли вы попробовать это, может быть, вы получите

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)
    }
person chandra1234    schedule 17.07.2018
comment
@Deevakarverma я обновил свой ответ, пожалуйста, проверьте, таким образом вы добавите только массив. - person chandra1234; 18.07.2018

Я не видел ни одного принятого ответа, поэтому делюсь своим решением. Он протестирован и работает.

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)
}
person Shashi Tiwari    schedule 03.09.2020