2010-12-20 127 views
2

(这确实是一个双重打击的问题而言,既然真的是二serperate问题,但他们还挺属于一起。)可可文件上传与进度条

第一个问题:

将如何我使用POST上传文件(我有一个包含文件内容的NSData对象),同时在NSProgressIndicator中显示上传进度?就像可以在NSURLDownload中执行bytesReceived一样,但是这次跟踪使用POST已经发送了多少个字节。

第二个问题:

虽然我有这个NSData阵,我将使用下面的代码发送NSData阵列。在这里,它让我感到困惑,我会如何告诉它,例如,POST值'file'是NSData对象。 NSDictionary可能会在这里做的工作,但我没有访问我的电脑和苹果的可爱的文档现在:

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]); 

我会很感激的任何帮助。

回答

5

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

今天(2014)最好的答案是:“简单地说,您必须使用可用的库之一来做到这一点。”

如果有完美的图书馆,在他们背后有10多年的开发经验,那么“滚动自己”就会疯狂。所以,找一个库(可悲的是不是ASIHttpRequest!)希望它有帮助!


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

内置进度追踪功能。这是非常微不足道的使用。

如果可以的话,不要忘了给这个家伙捐一小笔 - 如果他停止开发它,我们都塞满了!

+0

那么我不是为iOS开发,而是为Mac开发的。该库在Mac OS X上运行吗? – 2010-12-20 17:22:32

+0

很棒......这个作品就是我期望它做的。我正在一个额外的线程中做一个同步请求,它执行与备份相关的所有事情,以便UI可以保持更新......就像将文件粘贴到ZIP中一样。 – 2010-12-20 17:57:46

5

如果您只想使用Cocoa来做到这一点(并且我同意ASIHTTPRequest非常出色),那么您需要异步执行该操作。你在这里发布的示例代码是同步的。

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