Загрузка файла какао с индикатором выполнения - PullRequest
2 голосов
/ 20 декабря 2010

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

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

Как мне поступить при загрузке файла (у меня уже есть объект NSData, содержащий содержимое файла), используя POST, при отображении процесса загрузки в NSProgressIndicator? Так же, как можно сделать bytesReceived в 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 ]

5 голосов
/ 20 декабря 2010

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

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

5 голосов
/ 20 декабря 2010

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

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

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


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

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

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

...