我正在寻找一种控制下载文件大小的方法,同时使用以下代码:
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();
}
}发布于 2013-12-18 20:20:14
如果理查德的答案没有帮助,因为内容是块的,那么您应该查看ProgressMessageHandler,它是WebAPI.Client nuget的一部分,它定期接收事件,并允许您监视传输的字节。使用此事件处理程序,如果传输的字节超过一定数量,则可以取消该操作。
发布于 2013-12-18 19:15:47
尝试检查 property,它应该包含文件的大小(以字节为单位)。
https://stackoverflow.com/questions/20664793
复制相似问题