title author date CreateTime categories
dotnet 通过 HttpClient 下载文件同时报告进度的方法
lindexi
2019-08-31 16:55:58 +0800
2019-2-27 15:6:21 +0800
dotnet

本文告诉大家一个简单的方法通过 HttpClient 下载文件,同时报告下载进度

通过 HttpClient 的 ContentLength 很多时候都可以拿到下载的内容的长度,通过 ReadAsync 可以返回当前读到的长度,将读取到的长度加起来就是已经下载的长度

看起来很简单,于是直接给代码

       private static async Task DownloadFile(string url, FileInfo file)
{
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url); try
{
var n = response.Content.Headers.ContentLength;
var stream = await response.Content.ReadAsStreamAsync();
using(var fileStream = file.Create())
using (stream)
{
byte[] buffer = new byte[1024];
var readLength = 0;
int length;
while ((length = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0)
{
readLength += length; Console.WriteLine("下载进度" + ((double)readLength) / n * 100); // 写入到文件
fileStream.Write(buffer, 0, length);
}
} }
catch (Exception e)
{
}
}

如果不是需要获取进度,那么最简单的方法是

                var stream = await response.Content.ReadAsStreamAsync();
using(var fileStream = file.Create())
using (stream)
{
await stream.CopyToAsync(fileStream);
}

最新文章

  1. Module-Zero之版本管理
  2. JS 拼接字符串数组
  3. Spring面向切面编程(AOP)
  4. jQuery 安装方法
  5. WEBUS2.0 In Action - 搜索操作指南 - (2)
  6. What is the Best Programming Language to Learn in 2014?
  7. Spring与Struts整合
  8. yarn环境的搭建
  9. POJ 1324 Holedox Moving 搜索
  10. iOS之图文混排
  11. 故障排查实战案例——某电器ERP系统日志暴增
  12. 【Java】Objects 源码学习
  13. Android开发学习之路--Android系统架构初探
  14. 为程序启用 守护进程-- supervisior
  15. 消息中间件系列三:使用RabbitMq原生Java客户端进行消息通信(消费者(接收方)自动确认模式、消费者(接收方)自行确认模式、生产者(发送方)确认模式)
  16. 删除GitHub或者GitLab 上的文件夹,git rm -r --ceched 文件夹名 ,提交commit,git push
  17. sql注入(一)
  18. 大数据技术之_08_Hive学习_05_Hive实战之谷粒影音(ETL+TopN)+常见错误及解决方案
  19. python爬虫从入门到放弃(一)——试用bs4, request爬百度股票
  20. Zookeeper学习之路 (二)集群搭建

热门文章

  1. [轉]Reverse a singly linked list
  2. pytest框架结构运行规则及命名方式
  3. wrong mechandise category
  4. vue组件库的基本开发步骤(源代码)
  5. 解决码云未配置公钥问题——fatal: Could not read from remote repository.
  6. Android消息处理:EventBus、BroadCast和Handler-优缺点比较
  7. postgresql like 中的转义
  8. android5.1 修改音量键绑定多媒体声音
  9. 查看crontab执行记录
  10. DELPHI 多线程(TThread类的实现)