0

を使用してファイルをダウンロードしHttpClient、4MB のチャンクで処理しようとしています。クライアントはストリームを として返しますChunkedEncodingReadStream。ダウンロードしようとしているファイルのサイズは 50MB です。ただし、 を使用して 4MB のバッファで読み取ろうとすると、ReadAsync1321 バイトの読み取りカウントしか返されないことに気付きました。

私の質問は、ストリームを正しく読むにはどうすればよいですか?

私のコード:

var client = _httpClientFactory.CreateClient();
var response = await client.GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead);
stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

var chunkSize = 4096 * 1024;
var buffer = new byte[chunkSize];

var byteRead = stream.Read(buffer, 0, chunkSize);

if (byteRead < chunkSize)
{
    // process the buffer as the only chunk
}
else
{
    // process initial chunk

    while (byteRead < chunkSize)
    {
        byteRead = stream.Read(buffer, 0, chunkSize);
        // process next chunks
    }
}

明らかに、このコードは、最後のチャンクに到達するまで、応答ストリームが 4MB のチャンクを提供し続けることを前提としています。しかし、私が受け取ったストリームはそのようには機能しません。このシナリオでは、このストリームを処理する正しい方法は何ですか?

4

1 に答える 1