【发布时间】:2019-05-05 11:01:09
【问题描述】:
我使用下面的代码发送多部分参数
let headers = [
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": "Bearer \(myToken)",
"cache-control": "no-cache"
]
let parameters = [
[
"name": "firstname",
"value": "alex"
],
[
"name": "lastname",
"value": "black"
],
[
"name": "birthdate_day",
"value": "1"
],
[
"name": "birthdate_month",
"value": "5"
],
[
"name": "birthdate_year",
"value": "1989"
],
[
"name": "gender",
"value": "m"
],
[
"name": "avatar",
"fileName": "\(imageURL)"
]
]
let boundary = "Boundary-\(NSUUID().uuidString)"
var body = ""
let error: NSError? = nil
for param in parameters {
let paramName = param["name"]!
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"\(paramName)\""
if let filename = param["fileName"] {
if let contentType = param["content-type"] {
do {
let fileContent = try String(contentsOfFile: filename, encoding: String.Encoding.utf8)
if (error != nil) {
print(error as Any)
}
body += "; filename=\"\(filename)\"\r\n"
body += "Content-Type: \(contentType)\r\n\r\n"
body += fileContent
} catch {
print(error)
}
}
} else if let paramValue = param["value"] {
body += "\r\n\r\n\(paramValue)"
}
}
let postData = NSMutableData(data: body.data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "myUrl")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse?.statusCode as Any)
}
})
dataTask.resume()
return dataTask
图像 url 和其余数据但是我会收到 Satus 代码 500 我知道这个错误是服务器端的但是 android 版本使用相同的 api url 并且运行良好我知道这个代码可以修复并且也许小的改变可以修复这个代码的工作
【问题讨论】:
-
使用 CodyFire 库真的很简单,你可以试试看
-
您要在
imageURL上传图片吗?还是您真的只是向服务器发送某个图像的 URL?你也说“多部分”(在这种情况下你会做类似stackoverflow.com/a/26163136/1271826的事情),但你的标题说x-www-form-urlencoded(这表明你没有发送文件而是做类似stackoverflow.com/a/26365148/1271826的事情)。 -
@imike +1,来自 iOS 的多部分请求是一个巨大的痛苦 - 只需使用 Alamofire 或 CodyFire。
标签: ios swift multipartform-data