6

私は無駄にグーグルしてきました、そしてこれについてのあなたの助けを願っています。

AFHTTPRequestOperationストリーミングを使用して(outputstreamを設定して)画像をダウンロードしようとしました。ファイルをダウンロードします。問題ありません。ただし、totalBytesExpectedToReadは常に-1を返し、ダウンロードが完了したときにのみ正しい値を返すため、進行状況バーは正しく表示されません。

これはストリーミングの性質ですか?それとも私は何か間違ったことをしましたか?

以下の私のコード。

前もって感謝します!

(void)invokeAsynchronousSTREAMING:(NSString *)path locationToSave:(NSString *)locationToSave parameters:(NSDictionary *)paramDict callId:(NSString *)callId {

NSMutableURLRequest *request = [[AFServerAPIClient sharedClient] requestWithMethod:@"GET" 
                                                                              path:path 
                                                                        parameters:paramDict];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

if(locationToSave!=nil) {
    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:locationToSave append:NO];
}

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)  {

   //DO SOMETHING

} 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //DO SOMETHING
    }
 ];

[operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {

    NSLog(@"invokeAsyncronousSTREAMING - Received %lld of %lld bytes", totalBytesRead, totalBytesExpectedToRead);

    //DO SOMETHING
}];

[operation start];

} // end invokeAsyncStreaming

4

2 に答える 2

9

サーバーが応答に HTTP ヘッダーを-1設定しない場合、ダウンロードの進行状況が返されることがあります。Content-Length

この場合、代わりに不確定な進行状況インジケーターを使用することをお勧めします。

于 2012-10-30T06:50:21.747 に答える
5

また、この質問によると、転送中に gzip 圧縮が使用されている場合、ヘッダーに a が含まれていてtotalBytesExpectedToReadも返されます(どちらの場合も非常に頻繁です)。これは、コンテンツは転送の最後にのみ解凍できるため、転送が完了するまでそのサイズはわかりません。-1Content-Length

于 2013-05-14T22:37:41.703 に答える