NSUrlConnection执行多次

时间:2014-06-12 11:42:35

标签: ios objective-c nsurlconnection ios7.1

我使用以下代码上传了一张图片。图像在Web服务器中保存了3次。我很难在我的代码中进行更改。

NSString *url=[NSString stringWithFormat:@"http://192.168.2.4:98/UserImage.svc/InsertFacialImage?%@",requestString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];

//使用数据和其他图像附件创建'POST'MutableRequest。

 NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
NSData *data = UIImageJPEGRepresentation(chosenImage, 0.2f);
[request addValue:@"image/png" forHTTPHeaderField:@"Content-Type"];
NSMutableData *body = [NSMutableData data];


   [body appendData:[NSData dataWithData:data]];
[request setHTTPBody:body];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(@"Ret: %@",returnString);

NSURLConnection *connReq = [NSURLConnection connectionWithRequest:request delegate:self];
 if (connReq)
 {

    NSLog(@"Connection Sucessful");
  //  receivedData = [[NSMutableData alloc]init];

}

else {

    NSLog(@"failed");

}

[connReq start];

4 个答案:

答案 0 :(得分:2)

您正在执行此请求三次......

首先用

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

然后用

NSURLConnection *connReq = [NSURLConnection connectionWithRequest:request delegate:self];

最后用

[connReq start];

您应该查看NSURLConnection reference

答案 1 :(得分:2)

为缩小1张图片的最终代码

 NSString *requestString =[NSString stringWithFormat:@"UserId=%@&CategoryId=%@&Continent=%@&Country=%@&City=%@&Gender=%@&ImageName=%@&AgeRange=%@",UserId,CategoryId,continentTextfield.text,countrytextfield.text,citytextfield.text,gender,imagename,ageTextfield.text];

NSString *url=[NSString stringWithFormat:@"http://192.168.2.4:98/UserImage.svc/InsertFacialImage?%@",requestString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];

// Create 'POST' MutableRequest with Data and Other Image Attachment.


NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
NSData *data = UIImageJPEGRepresentation(chosenImage, 0.2f);
[request addValue:@"image/JPEG" forHTTPHeaderField:@"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[NSData dataWithData:data]];
[request setHTTPBody:body];

NSData *returnData;
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(@"Ret: %@",returnString);

答案 2 :(得分:1)

替换你的

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSData *returnData;

它会从3减少到2。

答案 3 :(得分:0)

我明白为什么你要将这些数据中的2个发送2次。电话

NSData *returnData = [NSURLConnection sendSynchronousRequest:request 
  returningResponse:nil 
  error:nil];

是触发请求的NSURL类调用。这是一个类调用,因此您不必创建NSURLConnection实例来使用它。

我建议不要使用它,因为它是同步的,并会阻止你的应用程序的UI,直到请求完成。

稍后,您使用相同的URL请求创建NSURLConnection实例并启动连接。这触发了另一个请求,这个异步。

您应该删除sendSynchronousRequest:来电。

我不知道你为什么要上传文件的第3份副本。

编辑:顺便提一下,您正在为图像创建JPEG数据,但是发送内容类型的图像/ png。这种不匹配可能会导致服务器端出现问题,或者如果其他客户端尝试下载并使用您正在上传的图像。