3

您好,当我从我的 web 服务加载数据时,我需要创建一个 progressView。

实际上,expectedContentLength 总是返回-1。

在看了很多类似的问题之后,看起来我的网络服务从未发送过 Content-Length:。

然后我用 CURL 检查,结果如下:

< HTTP/1.1 200 OK
< Date: Thu, 21 Jun 2012 10:04:39 GMT
< Server: Apache/2.2.16 (Debian)
< X-Powered-By: PHP/5.3.3-7+squeeze9
< cache-control: no-cache
< Vary: Accept-Encoding
< Content-Type: text/html; charset=UTF-8
< Content-Length: 3239  
< Connection: Keep-Alive
< Set-Cookie: PHPSESSID=u4o4i9dofdgnkfmtnf163635j6; path=/

这是我捕捉长度的代码

long long expectDataSize;
long long currentDataSize;

....

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response
{
    NSLog(@"expect content length %lld", [response expectedContentLength]);
    expectDataSize = [response expectedContentLength];
    currentDataSize = 0;
}

有人已经看到这个问题了吗?

4

2 回答 2

19

好的,我自己解决了这是我真正的问题和解决方案:

当我问卷曲时,我可以得到长度没问题。

但是当我使用 NSurlConnection

NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:req delegate:self];

响应将用“Gzip”压缩(不要问我为什么)。如果响应是用 Gzip 编码的,就不可能知道长度,那么“ expectedContentLength ”返回-1[response allHeaderFields]中没有“Content-Length” 。

如果您真的想获得长度,您可以简单地强制不使用 Gzip,如下所示:

[req setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
于 2012-06-26T09:26:31.690 回答
0

我遇到了同样的问题,似乎预期的文件大小是未知的,这就是它返回-1的原因。

看到类似的威胁为什么 [response expectedContentLength] 总是返回 -1

于 2012-06-23T16:36:32.050 回答