1

これはiOS用です:

以前に中断された接続からファイルのダウンロードを再開しようとしています。これを行うには、HTTPヘッダーの範囲フィールドを使用して、ダウンロード要求の開始点を次のように設定します。

NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url]];


// Find out if file already exists.
if([[NSFileManager defaultManager] fileExistsAtPath:filename])
{
    NSError *error;
    unsigned long long currentSize =[[[NSFileManager defaultManager]  attributesOfItemAtPath:filename error:&error] fileSize];

    NSLog(@"File exists, size:%llu",currentSize);

    // If the file was not completly downloaded -> resume download
    [urlRequest addValue:[NSString stringWithFormat:@"bytes=%llu-",currentSize] forHTTPHeaderField:@"Range"];

    //[urlRequest setValue:[NSString stringWithFormat:@"%llu-",currentSize] forHTTPHeaderField:@"range"];


}

上記のsrcでわかるように、私もsetValueを使用してみました。どちらの場合も、「範囲」フィールドが追加されているようですが、機能していません。ファイルは常にバイトオフセット0から送信されます。NSLog(@ "%@"、[urlRequest allHTTPHeaderFields])を実行すると、範囲値が設定されていますが、それでも機能しないようです。

NSLog(@ "%@"、[urlRequest allHTTPHeaderFields])を実行すると、次のように表示されます。{Range = "bytes = 13207107-"; }または、コメントアウトされたsetValueコードの場合:{Range="13207107-";}。

HTTPサーバーは範囲をサポートしていないのではないかと思いましたが、IT担当者はサポートしていると保証してくれました...

上記のコードに問題がある人はいますか?Webサーバーが範囲フィールドをサポートしているかどうかをテストする簡単な方法はありますか?

ありがとう!

4

1 に答える 1

1

アプリとは別にサーバーをテストします。リクエストの形式は正しいようです。最も簡単な方法はcurl、OSX に同梱されているものを使用することです。

curl -sv -H 'Range: bytes=100-500' http://www.google.com/intl/en_com/images/srpr/logo3w.png > /dev/null

Content-Range応答ヘッダーと適切なヘッダー (この場合は 401) に表示されないContent-Length場合は、サーバーに問題があることがわかります。

于 2011-11-03T23:46:13.500 に答える