を使用してファイルをダウンロードしHttpClient
、4MB のチャンクで処理しようとしています。クライアントはストリームを として返しますChunkedEncodingReadStream
。ダウンロードしようとしているファイルのサイズは 50MB です。ただし、 を使用して 4MB のバッファで読み取ろうとすると、ReadAsync
1321 バイトの読み取りカウントしか返されないことに気付きました。
私の質問は、ストリームを正しく読むにはどうすればよいですか?
私のコード:
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 のチャンクを提供し続けることを前提としています。しかし、私が受け取ったストリームはそのようには機能しません。このシナリオでは、このストリームを処理する正しい方法は何ですか?