adv*_*api 3 .net c# stream async-await dotnet-httpclient
我想知道是否有一种方法可以避免获取所有缓冲区,然后使用 HttpClient 和 File.WriteAllBytes 将它们写入文件。
这是我使用的代码片段
public async Task<byte[]> DownloadAsByteArray(string filename)
{
_logger.LogDebug($"Start downloading {filename} file at {DateTime.Now}");
var result = await _httpClient.GetByteArrayAsync(filename);
return result;
}
Run Code Online (Sandbox Code Playgroud)
var bytes = await _downloadFileService.DownloadAsByteArray(fileDownload);
await File.WriteAllBytesAsync(fullFlePathName, bytes);
Run Code Online (Sandbox Code Playgroud)
对于相当大的文件,应用程序内存增长得非常快。
GetAsync使用代替GetByteArrayAsync和 使用Content's怎么样CopyTo?
var response = await _httpClient.GetAsync(uri);
using var fs = new FileStream(...);
await response.Content.CopyToAsync(fs);
Run Code Online (Sandbox Code Playgroud)
或者使用GetStreamAsync
using var responseStream = await _httpClient.GetStreamAsync(uri);
using var fs = new FileStream(...);
await responseStream.CopyToAsync(fs);
Run Code Online (Sandbox Code Playgroud)