3

こんにちは、Web サービスからデータをロードするときに、progressView を作成する必要があります。

実際には、expectedContentLength は常に -1 を返します。

多くの同様の問題を見た後、私のWebサービスは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

わかりました私はそれを自分で修正しましたここに私の本当の問題と解決策があります:

Curlで尋ねると、問題なく長さを取得できます。

しかし、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 が返されます。

[responsectedContentLength] が常に -1 を返す理由と同様の脅威を参照してください。

于 2012-06-23T16:36:32.050 に答える