使用进度条上传Cocoa文件

Tri*_*ert 2 post cocoa file-upload nsurlrequest

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

第一个问题:

我如何使用POST上传文件(我有一个包含文件内容的NSData对象),同时在一个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]);
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.

Fat*_*tie 5

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

今天(2014年)的最佳答案是:"简单地说,你必须使用其中一个库来实现这一目标."

如果有完美的图书馆,那么"滚动你自己的"将会非常疯狂,其背后有10多个人年的发展.所以,找一个图书馆(遗憾的是不再是ASIHttpRequest!)希望它有所帮助!


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

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

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


pau*_*ley 5

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

这只是意味着您需要实现一些委托方法NSURLConnection来处理有关上传如何进行的信息.特别是,通过实施该方法,connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:您可以更新UI中的进度.