2

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

第一个问题:

我将如何使用 POST 上传文件(我已经有一个包含文件内容的 NSData 对象),同时在NSProgressIndicator? 很像可以做 bytesReceived in NSURLDownload,但这次使用 POST 跟踪已经发送了多少字节。

第二个问题:

虽然我有这个NSData数组,但我将使用下面的代码来发送NSData数组。在这里,它让我感到困惑,例如,POST 值“文件”是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]);

我会很感激任何帮助。

4

2 回答 2

5

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

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

当那里有完美的库时,“滚动你自己的”实际上是疯狂的,它们背后确实有 10 多个人年的开发。所以,找一个库(遗憾的是不再是 ASIHttpRequest!)希望它有帮助!


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

进度跟踪是内置的。使用起来非常简单。

如果可以的话,别忘了给这个家伙一点点捐款——如果他停止开发它,我们都吃饱了!

于 2010-12-20T11:18:36.730 回答
5

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

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

于 2010-12-20T11:37:39.123 回答