使用进度条上传Cocoa文件

时间:2010-12-20 03:12:28

标签: cocoa post file-upload nsurlrequest

(就问题而言,这确实是一个双重打击,因为确实存在两个有问题的问题,但它们有点属于一起。)

第一个问题:

如何使用POST上传文件(我有一个包含文件内容的NSData对象),同时在NSProgressIndicator显示上传进度?很像在NSURLDownload中可以执行bytesReceived,但这次跟踪已经使用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 个答案:

答案 0 :(得分:5)

注意 - 不幸的是,这篇文章仅具有历史意义,遗憾的是,ASIHttpRequest在几年后停止了开发。社区的悲剧。

今天(2014年)的最佳答案是:“简单地说,您必须使用其中一个库来执行此操作。”

当有完美的图书馆时,“滚动你自己的”会非常疯狂,其背后有10多个人年的发展。所以,找一个图书馆(遗憾的是不再是ASIHttpRequest!)希望它有所帮助!


只需使用ASIHttpRequest即可。它是所有iOS中最常用的库,也是Mac上常用的网络库。

内置进度跟踪功能。使用它是完全无足轻重的。

如果可以的话,不要忘记向这个人捐一小笔钱 - 如果他停止开发它我们都被塞满了!

答案 1 :(得分:5)

如果您只想使用Cocoa(并且我同意ASIHTTPRequest非常好),您需要异步进行发布。您在此处发布的示例代码是同步的。

这只是意味着您需要实施NSURLConnection的某些委托方法来处理有关上传如何进行的信息。特别是,实施方法connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:将使您能够更新UI中的进度。