在SWIFT中使用其他参数上传图像

我想使用SWIFT将图像上传到带有其他参数的服务器,服务器端脚本是PHP。 我将请求发布到http://www.23look.com/merchant/verify ,它接受以下参数:

mer_name – 字符串

mer_tel – 字符串

mer_address – 字符串

lng – 字符串

lat – string

mer_licence – 文件类型

token – 字符串

mer_type – 字符串

每当我发出HTTP post请求时,它总是返回0值作为响应,这意味着“系统错误”。 也许我正在做错事,有人可以帮我看看我的代码吗?

func uploadImage() { let postPictureUrl = NSURL(string: "http://www.23look.com/merchant/verify") let request = NSMutableURLRequest(URL: postPictureUrl!) request.HTTPMethod="POST" let param=[ "mer_name" : shopNameUITF.text!, "mer_tel" : shopTelephoneUITF.text!, "mer_address" : shopAddressUITF.text!, "lat" : "39.6892", "lng" : "115.9239", "token": KeychainWrapper.stringForKey("tokenValue")!, "mer_type": "smalll" ] let abc = KeychainWrapper.stringForKey("tokenValue")! let boundary = generateBoundaryString() request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let imageData = UIImageJPEGRepresentation(myImageView.image!, 0.1) if imageData==nil { print("image data is nil"); return } request.HTTPBody = createBodyWithParameters(param, filePathKey: "mer_license", imageDataKey: imageData!, boundary: boundary) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in if error != nil { print("error=\(error)") return } //You can print out response object print("***** response = \(response)") // Print out reponse body let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) print("**** response data = \(responseString!)") do { let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary dispatch_async(dispatch_get_main_queue(), { print(NSString(data: data!, encoding:NSUTF8StringEncoding)!) print(json) }) } catch let err { print(err) } } task.resume() } func generateBoundaryString() -> String { return "Boundary-\(NSUUID().UUIDString)" } func createBodyWithParameters(parameters:[String:String]?, filePathKey: String?, imageDataKey:NSData, boundary: String) -> NSData { var body=NSMutableData() if parameters != nil { for(key, value) in parameters! { body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") body.appendString("\(value)\r\n") } } let filename = "user-profile.jpg" let mimetype = "image/jpg" body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") body.appendString("Content Type: \(mimetype)\r\n\r\n") body.appendData(imageDataKey) body.appendString("\r\n") body.appendString("--\(boundary)--\r\n") return body } extension NSMutableData { func appendString(string: String) { let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) appendData(data!) } 

如果你使用appendData而不是appendString

 let body = NSMutableData() let tempData = NSMutableData() for (key, value) in parameters { tempData.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) tempData.appendData("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) tempData.appendData("\(value!)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) // etc etc } body.appendData(tempData) request.setValue("\(body.length)", forHTTPHeaderField: "Content-Length") request.HTTPBody = body