从iPhone上传文件时进度

时间:2010-04-02 20:12:28

标签: iphone upload nsurlconnection

我正在使用HTTP POST将文件从iPhone上传到服务器,并监控NSURLConnection连接中的进度:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite。问题是进展并不顺利。文件的开头在四个32K块中非常快,然后进度以更小的块更慢地进行,直到达到总数。然后,在响应最终返回之前,didSendBodyData不再被调用一段时间。因此,代码驱动的进度条快速(几乎瞬间)为前128K,然后变慢,然后长时间“坚持”100%。

一些研究表明,前四个块会立即进入手机的“内核缓冲区”,然后随着数据从另一端流出,数据流入缓冲区。当最后一个数据流入时,进度达到100%,但是当缓冲区在背面清空时,进度会增加。

我更倾向于根据后端出现的数据显示进度,或者根本没有缓冲区。有谁知道我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您是否考虑过进度监控ASIHTTPRequest?如果我没记错(我可能不会),代码允许您自定义更新进度“块”间隔。

答案 1 :(得分:0)

来自ASIHTTPRequest主页:

  

跟踪上传的进度   请求体小于128KB   目前不可能。对于请求   大于128KB,进度代表   不会收到有关的信息   第128KB帖子的进度   数据。这是因为有限   在CFNetwork API中。

然后他补充道:

  

2009年6月21日更新:精彩   Apple的人们非常友好   解决我的错误报告!在iPhone中   3.0 SDK,看起来缓冲区大小已减少到32KB,这使得   准确的上传进度跟踪a   更可靠。

我已经将演示应用安装到我的iPhone上并尝试上传了一个~140kb的文件,进度仍然似乎不准确。从我的发现来看,是的,缓冲区大小已减少到32kb,但回调方法只有在这些缓冲区中的4个被提起后才被调用(因此它已达到128kb)。对于小文件,进度指标似乎无用。