2011-05-04 29 views
1

我一直在努力工作這幾天。我做了很多研究,並嘗試了很多其他的東西,但似乎沒有任何工作。發佈是看起來最接近工作的代碼。除圖像外,所有數據都會填充到數據庫中。我試圖從中獲得的是能夠發佈由UIImagePNGRepresentation(image)返回的確切數據。我假設這是二進制數據,但不是100%。任何幫助,將不勝感激。謝謝!iPhone:將UIImage的二進制數據與其他表單數據一起發佈到網上

-(void)sendFormData:(NSArray*)data{ 
// add boundary 
NSString *[email protected]"----Boundary+AaB03x"; 

// create array of php vars 
NSArray *phpVariables=[NSArray arrayWithObjects:@"username",@"picture",@"firstName",@"lastName",@"phone",@"email",@"password",nil]; 
// create body data 
NSMutableData *body=[[NSMutableData alloc] init]; 

// dictionary of fields 
NSMutableDictionary *formFields=[[NSMutableDictionary alloc] init]; 
// fill dictionary 
for(int i=0; i<[data count]-1; i++) [formFields setObject:[data objectAtIndex:i] forKey:[phpVariables objectAtIndex:i]]; 


NSMutableURLRequest *urlRequest=[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"MY_URL"]]; 
[urlRequest setHTTPMethod:@"POST"]; 
[urlRequest setValue:[NSString stringWithFormat:@"multipart/form-data, boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"]; 

NSEnumerator *dictionaryEnumerator=[formFields keyEnumerator]; 
NSString *currentKey=nil; 
while((currentKey=[dictionaryEnumerator nextObject])){ 
    id currentValue=[formFields objectForKey:currentKey]; 
    if([currentValue class]==[UIImage class]){ 
     [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"myphoto.png\"\r\n",currentKey] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"Content-Type: image/x-png\r\n" dataUsingEncoding:NSASCIIStringEncoding]]; 
     [body appendData:[@"Content-Transfer-Encoding: binary\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:UIImagePNGRepresentation(currentValue)]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 
    else{ 
     [body appendData:[[NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n",boundary,currentKey,currentValue] dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]]; 
    } 
} 

[urlRequest setHTTPBody:body]; 

NSURLResponse *response; 
NSError *error; 
NSData *serverResponseData=[NSURLConnection sendSynchronousRequest:urlRequest 
               returningResponse:&response 
                  error:&error]; 
[body release]; 
[formFields release]; 

NSString *serverResponseString=[[NSString alloc] initWithData:serverResponseData 
                encoding:NSUTF8StringEncoding]; 
[self performSelectorOnMainThread:@selector(showServerResponseWithString:) 
         withObject:serverResponseString 
        waitUntilDone:FALSE]; 
} 

UPDATE:

上面的代碼工作正常,它實際上是用PHP的問題。

回答

1

我推薦使用ASIFormDataRequest來做這種事情(https://github.com/pokeb/asi-http-request/tree)。它允許避免這樣的低級別請求構造,當它容易犯一個小錯誤而使得你的請求無效時

相關問題