所以我尝试使用以下格式在Swift中执行多部分的发布请求:
user_id 3232424234
photo *PHOTO DATA*
我设置了我的请求,如本文底部所示,我收到以下错误:
可选(错误域= NSURLErrorDomain代码= -1005“网络连接已丢失。”UserInfo = {NSUnderlyingError = 0x7f86235cfe40 {错误域= kCFErrorDomainCFNetwork代码= -1005“(null)”UserInfo = {_ kCFStreamErrorCodeKey = -4,_kCFStreamErrorDomainKey = 4}},NSErrorFailingURLStringKey = ENDPOINTURL ,NSErrorFailingURLKey = ENDPOINTURL ,_ kCFStreamErrorDomainKey = 4,_kCFStreamErrorCodeKey = -4,NSLocalizedDescription =网络连接丢失。})
这个错误对我来说似乎非常奇怪,因为我可以通过省略POST请求的边界要求来消除它,但是服务器比使用500爆炸而让客户端知道它省略了边界请求,所以是的。我可能在Swift中做错了什么。以下是我提出请求的代码。如果需要更多信息,请告诉我,这是世界上的大师。
//Inputs in this scope are an "id" and a "photo"
let url = NSURL(string: "**URL**")
let boundary = NSUUID()
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.setValue("multipart/form-data; boundary=--\(boundary)", forHTTPHeaderField: "Content-Type")
let parameterBody:NSDictionary = [
"user_id": id,
]
let data:NSMutableData = NSMutableData()
parameterBody.enumerateKeysAndObjectsUsingBlock { (parameterKey: AnyObject, parameterValue: AnyObject, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
data.appendData(NSString(string: "--\(boundary)\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
data.appendData(NSString(string: "\(parameterKey) \(parameterValue)\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
}
data.appendData(NSString(string: "--\(boundary)\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
data.appendData(NSString(string: "photo").dataUsingEncoding(NSUTF8StringEncoding)!)
data.appendData(photo.imageData as! NSData)
data.appendData(NSString(string: "--\(boundary)--\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
request.setValue("\(data.length)", forHTTPHeaderField: "Content-Length")
let task = NSURLSession.sharedSession().uploadTaskWithRequest(request, fromData: data) { (responseJSON: AnyObject?, response: NSURLResponse?, error: NSError?) -> Void in
//Here I handle the response and check for errors.
}
task.resume()
答案 0 :(得分:1)
这里有很多问题:
边界应为DataName
。
当您将边界添加到NSUUID().UUIDString
标题时,不应在其中添加Content-Type
。
多部分请求的各个部分格式不正确。例如,您错过了--
。
这并不重要,但您无需设置Content-Disposition
请求。这是为你完成的。
我建议你参考这个答案,它提供了如何形成多部分请求的示例:Upload image with parameters in Swift。或者考虑使用Alamofire,它会为您完成所有这些工作。