图片(或video)在Swift中发布到服务器

您好我正在使用NSURLSession在迅速发布json数据到服务器如下

var request = NSMutableURLRequest(URL: NSURL(string: "http://mypath.com")) var session = NSURLSession.sharedSession() request.HTTPMethod = "POST" var params2 :NSDictionary = ["email":"myemail@gmail.com"] var params :NSDictionary = ["function":"forgotPassword", "parameters":params2] var err: NSError? request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err) request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in var strData = NSString(data: data, encoding: NSUTF8StringEncoding) let decodedJson = NSJSONSerialization.JSONObjectWithData(data, options: nil, error:nil) as NSDictionary println("Body: \(strData)") //Here I am getting response var err: NSError? var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary // Did the JSONObjectWithData constructor return an error? If so, log the error to the console if(err != nil) { println(err!.localizedDescription) let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding) println("Error could not parse JSON: '\(jsonStr)'") } else { // The JSONObjectWithData constructor didn't return an error. But, we should still // check and make sure that json has a value using optional binding. if let parseJSON = json { // Okay, the parsedJSON is here, let's get the value for 'success' out of it var success = parseJSON["success"] as? Int println("Succes: \(success)") } else { // Woa, okay the json object was nil, something went worng. Maybe the server isn't running? let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding) println("Error could not parse JSON: \(jsonStr)") } } }) task.resume() 

现在我想将键值“image”的数据forms多路分配到服务器(图像数据/video数据)以及其他参数,如user_id = 15,about_video_thumb =“myImagejpg”

在客观CI中,像下面这样的图像隆隆起伏

  -(void)upLoadThumb{ NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:@"http://mypath.com/uplaodpic"]]; [request setHTTPMethod:@"POST"]; //Setting content type - multipart/form-data NSString *boundary = @"---------------------------14737809831466499882746641449"; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSMutableData *postbody = [NSMutableData data]; [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // This is one field user_id [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"user_id\"\r\n\r\n%@", @"15"] dataUsingEncoding:NSUTF8StringEncoding]]; [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"about_video_thumb\"; filename=\"%@\"\r\n", @"myImage.jpg"] dataUsingEncoding:NSUTF8StringEncoding]]; //Appending NSDATA [postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [postbody appendData:[NSData dataWithData:appDelegate.userVdoImageData]]; [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:postbody]; conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if (conn) { webData = [NSMutableData data]; } } 

我如何用NSURLSession或NSURLConnection在swift中做到这一点? 提前致谢

如果你想在json主体中上传图片,你需要对它进行编码。 假设你有一个UIImage实例image

 let data = UIImageJPEGRepresentation(image, 0.5) let encodedImage = data.base64EncodedStringWithOptions(.allZeros) 

现在它被编码为base64string。 我们可以在json中使用它。

 let parameters = ["image": encodedImage, "otherParam": "otherValue"] let session = NSURLSession.sharedSession() let request = NSMutableURLRequest(URL: NSURL(string: "YOUR_URL")!) request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.HTTPMethod = "POST" var error: NSError? request.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameters, options: .allZeros, error: &error) if let error = error { println("\(error.localizedDescription)") } let dataTask = session.dataTaskWithRequest(request) { data, response, error in // Handle response } dataTask.resume()