上传多个图像到服务器IOS

我想知道如何使用目标C将多个图像上传到服务器。下面是我正在尝试使用的代码片段。

-(void)uploadImage:(NSMutableArray *)image andMessageBO:(MessageBO *)message { NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@PostImageServlet?",kPostImageUploadWebServiceURL]]; NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:url]; [postRequest setHTTPMethod:@"POST"]; [postRequest setTimeoutInterval:60.0]; NSString *stringBoundary = @"0xKhTmLbOuNdArY"; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]; [postRequest addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSData *imageData =UIImagePNGRepresentation(image); NSMutableData *postBody = [[NSMutableData alloc] init]; [postBody appendData:[[NSString stringWithFormat:@"isFormField=true"]dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[[NSString stringWithFormat:@"%@",@"Content-Disposition: form-data; name=\"userid\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[[NSString stringWithFormat:@"%d",messageBO.messageId] dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"profilepic\"; filename=\"%d_postImage.png\"\r\n",messageBO.messageId] dataUsingEncoding:NSUTF8StringEncoding]]; for (int i = 0; i < [image count]; i++) { [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"profilepic\"; filename=\"%d_postImage%d.png\"\r\n",messageBO.messageId,i] dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[image objectAtIndex:i]]; } [postBody appendData:[[NSString stringWithFormat:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[NSData dataWithData:imageData]]; [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; [postRequest setHTTPBody:postBody]; NSData *returnData = [NSURLConnection sendSynchronousRequest:postRequest returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; DebugLog(@"IMge:%@",returnString); // [self removeOfflineImage:expenseBO]; } 

谢谢

我个人使用这种方法来沟通和上传人员到服务器这是一个JSONtypes的方法:

 - (NSURLRequest *)convertToRequest:(NSString *)stringURL withDictionary:(NSDictionary *)dictionary { NSError *error = nil; NSData *JSONData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error]; NSURL *url = [NSURL URLWithString:stringURL]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; [request setHTTPBody: JSONData]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept-Encoding"]; [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[JSONData length]] forHTTPHeaderField:@"Content-Length"]; return request; } 

字典参数被填充类似于:

首先将数据转换为base64String,如下所示:

 NSData *data = UIImageJPEGRepresentation(self.userImageView.image, 1.0); NSData *imageBase64Data = [data base64EncodedDataWithOptions:0]; NSString *imageBase64String = [[NSString alloc] initWithData:imageBase64Data encoding: NSUTF8StringEncoding]; 

将其添加到字典中…

 NSDictionary *jsonDictionary = @{ @0 : @{ "name": "file1", "image" : imageBase64String1 }, @1 : @{ "name": "file2", "image" : imageBase64String2 } //and so on.. }; //you may want to put that in a loop [ImplementationClass convertToRequest:YourServerURL withDictionary: jsonDictionary]; 

而在服务器端则是这样的:

解码发送到服务器(PHP)的数据:

 // Retrieves data $handle = fopen('php://input','r'); $jsonInput = fgets($handle); $json_decoded = json_decode($jsonInput,true); /* * I commented this because i'm not sure if this suits my `NSDictionary` above * but you can always check by logging `$json_decoded` or probably `var_dump()` function of php * * $json_decoded[0]['name']; * $json_decoded[0]['image']; * $json_decoded[1]['name']; * $json_decoded[1]['image']; */ function upload_image($filename, $uploadedfile) { $save_file_path = getcwd()."/uploads/"; $save_file_path .= $filename; $image_file = base64_decode($uploadedfile); //DELETES EXISTING if (file_exists($save_file_path)) { unlink($save_file_path); } //CREATE NEW FILE file_put_contents($save_file_path, $image_file); //CHECK FILE IF EXIST return ((file_exists($save_file_path)) ? true : false ); } 

希望这对你有帮助..干杯..