Загрузка файла какао с индикатором выполнения

(Это действительно двойной вопрос с точки зрения вопросов, так как на самом деле есть два отдельных вопроса, но они как бы принадлежат друг другу.)

Первый вопрос:

Как бы я пошел о загрузке файла (у меня есть объект NSData, уже содержащий содержимое файла), используя POST, при отображении процесса загрузки в NSProgressIndicator? Так же, как можно сделать байты, полученные в NSURLDownload, но на этот раз, отслеживая, сколько байтов уже было отправлено с использованием POST.

Второй вопрос:

Пока у меня есть это NSData Массив, я буду использовать код ниже, чтобы отправить NSData массив. Здесь меня смущает, как я скажу, что, например, значение POST 'file' является NSData объект. NSDictionary вероятно, сделал бы работу здесь, но у меня нет доступа к моему компьютеру и прекрасным Apple Docs прямо сейчас.

NSMutableURLRequest* post = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:@"http://yourdomain.com/post.php"]];

[post setHTTPMethod: @"POST"];

[post setHTTPBody:myFileNSData];

NSURLResponse* response;

NSError* error;

NSData* result = [NSURLConnection sendSynchronousRequest:post returningResponse:&response error:&error];

NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]);

Буду признателен за любую помощь.

2 ответа

Решение

ПРИМЕЧАНИЕ. К сожалению, этот пост представляет только исторический интерес, поскольку, к сожалению, ASIHttpRequest прекратил разработку через несколько лет. Трагедия для сообщества.

Лучший ответ сегодня (2014): "просто, вы должны использовать одну из библиотек, доступных для этого".

Было бы в буквальном смысле безумием "катать свои собственные", когда есть прекрасные библиотеки, за которыми стоит буквально 10 с лишним человеко-лет разработки. Итак, найдите библиотеку (к сожалению, больше не ASIHttpRequest!) Надеюсь, это поможет!


Просто используйте ASIHttpRequest. Это наиболее используемая библиотека во всех iOS и обычная сетевая библиотека на Mac.

Отслеживание прогресса встроено. Это совершенно тривиально в использовании.

Не забудьте сделать небольшое пожертвование парню, если сможете - если он перестанет его развивать, мы все напичканы!

Если вы хотите использовать только Какао для этого (и я согласен с тем, что ASIHTTPRequest превосходен), вам нужно будет выполнять пост асинхронно. Пример кода, который вы разместили здесь, является синхронным.

Это просто означает, что вам нужно реализовать некоторые из методов делегата NSURLConnection обрабатывать информацию о том, как загружается ваша загрузка. В частности, реализация способа connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: позволит вам получать информацию о прогрессе в вашем пользовательском интерфейсе.

Другие вопросы по тегам