Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

begdev

macrumors newbie
Original poster
I've put together this code from lots of research.
Information on the twitpic API is here: Twitpic - Share photos on Twitter

Through debugging i can tell that the dictionary is good, and that it gets through all the methods, the request gets submitted, but then the NSLog method returns <>.

I'm not sure where I could be going wrong, i don't know much about the multipart/form-data structure. Maybe I'm doing something wrong with my connection?

Code below.

Code:
-(void)uploadBoth {		
		//Create dictionary of post arguments
		NSArray *keys = [[NSArray alloc] initWithObjects:@"media",@"username",@"password",@"message",nil];
		NSArray *objects = [[NSArray alloc] initWithObjects:
							imageData, twitterUserSave, twitterPassSave, [NSString stringWithFormat:@"%@",messageView.text], nil];
	
		NSDictionary *keysDict = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
	NSLog(@"%@", keysDict);
		
		//create twitpic photo post
		NSURLRequest *twitpicPost = [self twitpicRequest:keysDict withData:imageData];
		
		//send request, return YES if successful
		NSURLConnection *twitpicConnection = [[NSURLConnection alloc] initWithRequest: twitpicPost delegate:self];
	
		if (!twitpicConnection) {
			NSLog(@"Failed to submit request");
		} else {
			NSLog(@"Request submitted");
			NSData *receivedData = [[NSMutableData data] retain];
			NSLog(@"%@", receivedData); // THIS PART RETURNS <>
		}
}
The NSURLRequest part
Code:
-(NSURLRequest *)twitpicRequest:(NSDictionary *)postKeys withData:(NSData *)data {
		
	NSLog(@"got this far");
	
		//create the URL POST Request to twitpic
		NSURL *twitpicURL = [NSURL URLWithString:@"http://twitpic.com/api/uploadAndPost"];
		NSMutableURLRequest *twitpicPost = [NSMutableURLRequest requestWithURL:twitpicURL];
		[twitpicPost setHTTPMethod:@"POST"];
		
		//Add the header info
		NSString *stringBoundary = [NSString stringWithString:@"0xAbCdEfGbOuNdArY"];
		NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];
		[twitpicPost addValue:contentType forHTTPHeaderField: @"Content-Type"];
		
		//create the body
		NSMutableData *postBody = [NSMutableData data];
		[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
		
		//add key values from the NSDictionary object
		NSEnumerator *keys = [postKeys keyEnumerator];
		int i;
		for (i = 0; i < [postKeys count]; i++) {
			NSString *tempKey = [keys nextObject];
			[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",tempKey] dataUsingEncoding:NSUTF8StringEncoding]];
			[postBody appendData:[[NSString stringWithFormat:@"%@",[postKeys objectForKey:tempKey]] dataUsingEncoding:NSUTF8StringEncoding]];
			[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
		}
		
		//add data field and file data
		[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"data\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
		[postBody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
		[postBody appendData:[NSData dataWithData:data]];
		[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
		
		//add the body to the post
		[twitpicPost setHTTPBody:postBody];
	
	return twitpicPost;
}
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.