Мне действительно нужна помощь в решении проблемы с NSURLConnection в итерации. Я создаю приложение командной строки в Mac OS, которое отправляет JPG на сервер. Теперь каждые 30 секунд он проверяет наличие новых изображений на компьютере, если находит, отправляет их на наш сервер с помощью HTTP Post (я посмотрел на FTP, но не нашел большой поддержки, и HTTP, кажется, быстрее для небольших файлов). Так что происходит, что POST будет отправлять данные правильно каждую другую итерацию, но время ожидания для остальных. Я понятия не имею, почему это будет делать это. Я попробовал и синхронный и асинхронный запрос, и они оба имеют одинаковый результат. Вот функция, которая вызывается для отправки изображений:
+ (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, каждый запрос будет успешно выполнен (поэтому я знаю, что он не имеет никакого отношения к принимающему серверу). Я также знаю, что ImageData является допустимым JPG, потому что перед этим вызовом функции я сохраняю его обратно на диск (для проверки работоспособности).
У кого-нибудь есть идеи, почему это происходит? Любое понимание будет с благодарностью.
ОБНОВЛЕНИЕ: я смог заставить его работать, внедрив пакет ASIHTTPRequest , полагаю, я неправильно настроил параметры формы из нескольких частей.