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

begdev

macrumors newbie
Original poster
Mar 14, 2009
20
0
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.