我的程序使用HttpClient向Web API发送GET请求,并返回一个文件.
我现在使用此代码(简化)将文件存储到光盘:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,当此代码运行时,该进程会将所有文件加载到内存中.我实际上宁愿期望流从HttpResponseMessage.Content流式传输到FileStream,因此只有一小部分流被保存在内存中.
我们计划在大文件(> 1GB)上使用它,那么有没有办法在没有内存中的所有文件的情况下实现它?
理想情况下,没有手动循环读取一部分到byte []并将该部分写入文件流直到所有内容都被写入?