私のプログラムはHttpClientを使用してWeb APIにGETリクエストを送信し、これがファイルを返します。メモリを経由せずにHttpResponseMessageからファイルに直接ストリームできますか?
私は今、ディスクにファイルを保存するために、このコード(簡体字)を使用します。このコードが実行されるとき
今public async Task<bool> DownloadFile()
{
var client = new HttpClient();
var uri = new Uri("http://somedomain.com/path");
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var fileName = response.Content.Headers.ContentDisposition.FileName;
using (var fs = new FileStream("C:\test\" + fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
await response.Content.CopyToAsync(fs);
return true;
}
}
return false;
}
、プロセスがメモリにファイルのすべてをロードします。私は実際にストリームがHttpResponseMessage.ContentからFileStreamにストリームされることを期待しています。そのため、ストリームのほんの一部がメモリに保持されます。
大容量のファイル(> 1GB)で使用する予定であるため、すべてのファイルをメモリに保存しなくても実現できますか?
理想的には、部分をバイト[]に読み込み、すべてのコンテンツが書き込まれるまでその部分をファイルストリームに書き込むことなくループしないでください。それはこのようになります
見て - https://msdn.microsoft.com/en-us/library/system.web.http.hosting.ihostbufferpolicyselector(v=vs.118).aspx –
'CopyToAsync'はあなたが何を記述しているのですか? (内部的には、応答からデータのチャンクを繰り返し読み込み、すべてのデータが転送されるまでファイルに書き込みます)、ファイル全体を一度にバッファリングする必要はありません。 – Iridium
私はあまりにも思ったことは、メモリ消費量を見て、それは間違いなく私は避けたいメモリ内のファイル全体を読み込みます。 –