Ios 如何使用Alamofire multipart从使用swift 4的数据发送参数中的数组
我正在使用Alamofire将图像和文件上传到服务器。但我在发送带有图像的参数数组时遇到了一个问题。但是,当我以params形式发送数组时,它会将数组转换为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
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)
}