2010-12-16 2 views
2

반복적으로 NSURLConnection에 문제가있는 경우 도움이 필요합니다. 나는 맥 오에스에서 서버에 jpg를 보내는 커맨드 라인 앱을 만들고있다. 이제 30 초마다 컴퓨터에서 새 이미지를 확인합니다. HTTP Post를 사용하여 Google 서버로 전송하는 경우 (FTP로 조사했지만 많은 지원을 찾지 못했고 HTTP는 작은 파일의 경우 더 빠름) 따라서 POST는 다른 모든 반복 작업을 올바르게 보내지 만 나머지는 시간 초과가 발생합니다. 나는 왜 이것이 그렇게 할 것인지 전혀 모른다. 나는 동기식 요청과 비동기식 요청을 모두 시도했으며 둘 다 같은 결과를 보였다. 여기에 이미지를 게시 할 호출되는 함수이다 : 나는 모든 요청이 성공적으로 완료 신체의 imageData의 부분을 주석 처리하면 (내가 알고 그것을 가지고 이것에 대해 불허 마음을 매우 찾을 내용Mac OS NSURLConnection in Iteration

+ (BOOL)uploadImage:(NSData *)imageData filename:(NSString *)filename{ 

     NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] retain]; 

    NSString *upload_url = [self getPlistValue:@"config.plist" withKey:@"upload_url"]; 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", 
       [self getPlistValue:@"config.plist" withKey:@"upload_protocol"], 
       upload_url]]; 
    [request setURL:url]; 
    [request setTimeoutInterval:10]; 
     [request setHTTPMethod:@"POST"]; 
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 

     NSString *boundary = [NSString stringWithFormat:@"---------------------------14737809831466499882%d",arc4random() % 74]; 
     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
     [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *body = [NSMutableData data]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"client\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:[self getPlistValue:@"config.plist" withKey:@"client_dir"]] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"fname\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithString:filename] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

     [body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"jpg_img\"; filename=\"%@.%@\"\r\n",filename,@"jpg"]] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[NSData dataWithData:imageData]]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [request setHTTPBody:body]; 

    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSString *returnString = [[[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding] autorelease]; 
    [body release]; 
    [request release]; 
    [returnData release]; 
    return ([returnString isEqualToString:@"DONE"]); 
} 

수신 서버와 관련 없음). 또한이 함수 호출 바로 전에 디스크에 다시 저장하기 때문에 ImageData가 유효한 JPG임을 알 수 있습니다 (온 전성 검사를 위해).

왜 이런 일이 일어날 지 아이디어가 있습니까? 모든 통찰력은 대단히 감사 할 것입니다.

업데이트 : ASIHTTPRequest 패키지를 구현하여 작동시킬 수 있었지만 다중 부품 양식 매개 변수를 올바르게 설정하지 못했을 것으로 생각됩니다.

답변

0

이 링크를 체크 아웃 : 나는 당신의 정확한 문제를 정확하게 파악 할 수 http://www.cimgf.com/2010/02/12/accessing-the-cloud-from-cocoa-touch/

,하지만 난 당신에게 도움이 될 것입니다 생각 위의 링크에서 관련 코드는 다음과 같습니다 wpearse

NSData *imageData = UIImagePNGRepresentation([UIImage [email protected]"localimage.png"]); 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] 
     initWithURL:[NSURL 
     URLWithString:@"http://www.cimgf.com/testpostimage.php"]]; // Not a real URL. 

[request setHTTPMethod:@"POST"]; 
[request setValue:@"image/png" 
     forHTTPHeaderField:@"Content-type"]; 
[request setValue:[NSString stringWithFormat:@"%d", 
     [imageData length]] 
     forHTTPHeaderField:@"Content-length"]; 
[request setHTTPBody:imageData]; 

[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
+0

감사합니다 참조 용. ASIHTTPRequest를 POST 데이터로 사용하는 또 다른 예를 발견했습니다. 이는 매력처럼 작동합니다. 추천을 위해 +1 하겠지만 평판이 충분하지 않습니다. – thiesdiggity