我应该发布在验证凭证和图像数据期间生成的会话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;
}
请帮忙。
我坚持了很长时间。
提前致谢。
答案 0 :(得分:1)
尝试此代码,并在post nsstring
中传递您的值NSString* url=[NSString stringWithFormat:url];
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURLURLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60.0];
//do post request for parameter passing
[theRequest setHTTPMethod:@"POST"];
NSString *post = [NSString stringWithFormat:@"&imageData=%@",postData];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
[theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPBody:postData];
[theRequest setURL:[NSURL URLWithString:url]];
[theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
NSURLConnection *serverConnectionObj = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
答案 1 :(得分:0)
这是一种类方法解决方案:
头
//=========================
// POST FORM WITH IMG
//=========================
+ (NSData *)postToUrl:(NSURL*)url
form:(NSDictionary*)form
andImage:(UIImage*)img
imageKey:(NSString*)imageKey
error:(NSError**)error
returningResponse:(NSURLResponse**)response;
班级方法:
#pragma mark -
#pragma mark POST FORM
//=========================
// POST FORM
//=========================
+(NSData *)postToUrl:(NSURL*)url form:(NSDictionary*)form andImage:(UIImage*)img imageKey:(NSString*)imageKey error:(NSError**)error returningResponse:(NSURLResponse**)response{
NSLog(@"postToUrl:%@ Form:%@ andImage:%@ imageKey:%@",url,form,img,imageKey);
NSString *boundary = @"iOS_iKANIMO_BOUNDARY_STRING";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"photo.png\"\r\n", imageKey] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:UIImagePNGRepresentation(img)]];
for (NSString*key in [form allKeys]) {
NSLog(@"%@ - %@",key,[form objectForKey:key]);
NSString *value = [form objectForKey:key];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n%@",key, value] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
//Now all we need to do is make a connection to the server and send the request:
[request setHTTPBody:body];
return [NSURLConnection sendSynchronousRequest:request returningResponse:response error:error];
}