4

URLからファイルのサイズを確認する必要があります。AFNetworkingでファイルをダウンロードすると、ファイルサイズが完全に取得されます。

AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request
                                                                        success:^(AFHTTPRequestOperation *operation, id responseObject) {
                                                                            // Success Callback

                                                                        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                                                            // Failure Callback

                                                                        }];

別のブロックでファイルサイズを取得します

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

    }];

ただし、ユーザーにプロンプ​​トを表示できるように、ダウンロード要求を開始する前にファイル サイズを確認する必要があります。別の方法も試してみました

NSURL *url = [NSURL URLWithString:@"http://lasp.colorado.edu/home/wp-content/uploads/2011/03/suncombo1.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSLog(@"original = %d", [data length]);

ただし、サイズを計算するためにすべてのデータをダウンロードするので、UI をブロックします。ダウンロードする前にファイルサイズを確認する方法はありますか? どんな助けでも大歓迎です。

4

2 に答える 2

21

サーバーがそれをサポートしている場合は、実際のデータ ペイロードなしでヘッダー (HEADではなく ) を取得する要求を行うことができます。これには.GETContent-Length

それができない場合は、のダウンロードと使用を開始する必要がありexpectedContentLengthますNSURLResponse


基本的に、 のインスタンスを作成し、パラメーターを に設定してNSMutableURLRequest呼び出します(デフォルトの を置き換えるため)。次に、現在の完全なデータ セット (同じ URL) を要求するときに、それをサーバーに送信します。setHTTPMethod:method@"HEAD"GET

于 2013-10-28T10:23:29.987 に答える
6

コードは次のとおりです。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:candidateURL];
                    [request setHTTPMethod:@"HEAD"];

                    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
                    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
                     {
                         NSLog(@"Content-lent: %lld", [operation.response expectedContentLength]);

                     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                         NSLog(@"Error: %@", error);
                     }];
于 2014-09-07T13:02:29.183 に答える