我正在寻找一种方法来监控下载文件的大小,同时使用以下代码:
var client = new HttpClient();
HttpResponseMessage resp = await client.GetAsync(mediaUri, HttpCompletionOption.ResponseHeadersRead);
using (var fileStream = File.Create(outputPath))
{
using (var httpStream = await resp.Content.ReadAsStreamAsync())
{
httpStream.CopyTo(fileStream);
fileStream.Flush();
}
}
如何阻止下载大于预定义大小的文件?
修改
在下面的答案出现之前,我使用此替换CopyTo
。我将它放在这里可能会对以下答案中的ProgressMessageHandler
产生影响:
using (var fileStream = File.Create(outputPath))
{
using (var httpStream = await resp.Content.ReadAsStreamAsync())
{
// instead of httpStream.CopyToAsync(fileStream);
byte[] buffer = new byte[65536];
while (true)
{
int read = await httpStream.ReadAsync(buffer, 0, buffer.Length, ct);
if (read <= 0)
break;
// do the policing here
await fileStream.WriteAsync(buffer, 0, read);
}
fileStream.Flush();
}
}
答案 0 :(得分:3)
尝试检查the resp.Content.Headers.ContentLength
property,其中应包含文件大小(以字节为单位)。
答案 1 :(得分:2)
如果Richard的答案没有用,因为内容是分块的,那么你应该查看属于WebAPI.Client nuget的ProgressMessageHandler
,它定期接收事件并允许你监视传输的字节。如果传输的字节数超过一定数量,则可以使用此事件处理程序取消操作。