【发布时间】:2014-06-30 05:44:47
【问题描述】:
我应该发布在验证凭据和图像数据期间生成的会话 ID。但是图像和会话 ID 没有上传。 当我使用 ASIHTTPRequest 时它工作正常,后来当我尝试使用 NSMutableUrlRequest 和 NSURLConnection 时它似乎不起作用。
下面给出的是用于 POST 图像和会话 ID 的代码
- (void)postinDataToServer:(NSData *)inData
{
//inData is the image data.
[inData retain];
NSString *urlString = @"http://xyz.com/abcd/kgh.php";
NSURL* url = [NSURL URLWithString:urlString];
NSMutableData *photoData = [[NSMutableData alloc]init];
//SessionID is stored in NSUserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString * boundary = @"photoBoundaryParm";
NSString * boundaryString = [NSString stringWithFormat:@"--%@\r\n", boundary];
NSString * boundaryStringFinal = [NSString stringWithFormat:@"--%@--\r\n", boundary];
[photoData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"SessionID\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:[[NSString stringWithFormat:@"SessionID=%@",[defaults objectForKey:@"SessionID"]] dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"photo\";\r\nfilename=\"myphoto.png\"\r\nContent-Type: image/png\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:inData];
[photoData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[photoData appendData:[boundaryStringFinal dataUsingEncoding:NSUTF8StringEncoding]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:photoData];
NSString* requestDataLengthString = [[NSString alloc] initWithFormat:@"%d", [photoData length]];
[request addValue:requestDataLengthString forHTTPHeaderField:@"Content-Length"];
[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self
startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[connection start];
[inData release];
inData = nil;
}
请帮忙。
我坚持了很长时间。
提前致谢。
【问题讨论】:
-
在您的连接委托方法中,您是否点击了成功回调? (如果它是失败的,请提供实际的错误,虽然从事情的声音来看它是成功的,只是没有发布图像 - 只是想先消除明显的问题!)
-
真的要手动吗?您是否考虑过尝试 AFNetworking(请参阅 stackoverflow.com/questions/15410689/…)
-
delgate 方法 didReceiveResponse、didReceiveData 和 connectionDidFinishLoading 被调用。但是没有调用 didFailWithError 。 @大卫多伊尔
-
我正在尝试创建一个框架,所以想尽可能地避免第三方。我最初使用 ASIHTTPRequest 并且工作正常。但是在将我的框架集成到其他应用程序的过程中,我遇到了其他问题,因此切换到上述方法。 @VadimYelagin
-
你检查了吗? nthn.me/posts/2012/objc-multipart-forms.html为我工作。
标签: iphone ios nsurlconnection nsmutableurlrequest