【发布时间】:2019-08-18 23:20:52
【问题描述】:
我正在使用 Alamofire 将图像上传到服务器上,这种方法效果很好,我已经在很多项目中使用过。
我使用以下代码使用多格式数据在我的服务器上上传图像。
Alamofire.upload( multipartFormData: { multipartFormData in
for (key, value) in parameters {
if let data = (value as! String).data(using: .utf8) {
multipartFormData.append(data, withName: key)
}
}
let imageData = image?.pngData()
multipartFormData.append(imageData!, withName: "profile_image", fileName: "profileImage", mimeType: "")
}, to: getURL(.addProfile), headers: getHeaders(), encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.response(completionHandler: { (defaultDataResponse) in
guard let httpResponse = defaultDataResponse.response else {
completion(nil, defaultDataResponse.error)
return
}
if httpResponse.statusCode == 200 {
do {
let genericModel = try JSONDecoder().decode(ProfileImageModel.self, from: defaultDataResponse.data!)
completion(genericModel, nil)
} catch {
completion(nil, error)
}
} else {
completion(nil, defaultDataResponse.error)
}
})
case .failure(let encodingError):
completion(nil, encodingError)
}
})
这很好用。
我的问题在这里,在 api 中传递了额外的参数。
for (key, value) in parameters {
if let data = (value as! String).data(using: .utf8) {
multipartFormData.append(data, withName: key)
}
}
以上代码会将字符串值转换为数据并附加到multipartFormData。它适用于以下类型的请求结构。
{
"first_name": "ABC",
"last_name": "XYZ",
"bio": "iOS Developer"
}
当我有以下类型的请求结构时该怎么办?
{
"first_name": "ABC",
"last_name": "XYZ",
"bio": "iOS Developer"
"location": {
"full_address": "My Location",
"latitude": "23.0000",
"longitude": "76.0000"
}
}
请帮助实现这一目标。
【问题讨论】:
-
这取决于你的服务器期望什么。
-
例如,如果您的服务器需要 json 编码的字符串,您可以将
location字典转换为 JSON 字符串,并将该数据附加到您的表单中 -
好的,我明白你的意思了。让我检查一下。
-
如果它适合你,让我知道作为答案发布
-
@arturdev,当然。