微信公众号“DotNet”的文章《.NET 异步、跨平台、支持分段下载的开源项目 》(参考文献1)介绍了GitHub中的开源下载模块Downloader的基本用法,本文学习Downloader的主要参数设置方式及基本用法,最后编写简单的测试程序进行文件下载测试。
新建Winform项目,在NuGet管理器中安装Downloader,如下图所示。
Downloader模块中使用DownloadConfiguration类配置下载属性,主要属性如下所示:
序号 | 名称 | 说明 |
---|---|---|
1 | BufferBlockSize | 缓冲块大小,int类型,默认值为1024 |
2 | CheckDiskSizeBeforeDownload | 下载文件前检查磁盘空间,bool类型,默认值为true |
3 | ChunkCount | 分块下载文件时的分块数量,int类型,默认值为1 |
4 | MaximumBytesPerSecond | 最大下载速度,默认值为long.MaxValue |
5 | MaximumSpeedPerChunk | 单块的最大下载速度,只读属性,如果非并行下载,其值等同MaximumBytesPerSecond,并行下载时,其值为MaximumBytesPerSecond / Math.Min(ChunkCount, ParallelCount) |
6 | MaxTryAgainOnFailover | 下载失败时的最大尝试次数,int类型,默认值为int.MaxValue |
7 | ParallelDownload | 是否支持并行下载,bool值,默认为false |
8 | ParallelCount | 并行下载数数量,int类型,默认值为,配合ParallelDownload 使用 |
9 | RangeDownload | 是否仅下载文件的部分内容,bool类型,默认值为false |
10 | RangeLow/RangeHigh | 下载部分内容时,设置内容的起止位置,long类型,默认值为0,配合RangeDownload使用 |
11 | RequestConfiguration | 设置请求头信息,RequestConfiguration类型,详细设置见参考文献2 |
12 | Timeout | 设置超时时间(毫秒,millisecond),int类型,默认值为1000 |
13 | ClearPackageOnCompletionWithFailure | 下载失败时清除已下载内容?,bool类型,默认值为false |
14 | MinimumSizeOfChunking | 分块的最小尺寸,long类型,默认值为512 |
Downloader模块中使用DownloadService下载文件(也可以用DownloadBuilder,用法见参考文献2),主要函数、事件等如下所示:
序号 | 名称 | 类型 | 说明 |
---|---|---|---|
1 | IsBusy/IsCancelled/ IsPaused/Status | 属性 | 获取下载状态 |
2 | Package | 属性 | 存储下载过程信息,支持序列化/反序列化,可用于停止下载后令择时机恢复下载 |
3 | DownloadFileCompleted | 事件 | 下载结束时的事件,在文件下载出错、取消下载和成功下载后触发 |
4 | DownloadProgressChanged | 事件 | 下载进度事件,文件下载过程中触发,通过该事件可以获取总的下载进度、已下载大小、总下载大小、下载速度等信息 |
5 | ChunkDownloadProgressChanged | 文件块的下载进度事件, | |
6 | DownloadStarted | 事件 | 下载开始时的事件 |
7 | DownloadFileTaskAsync | 函数 | 文件异步下载函数 |
8 | CancelAsync | 函数 | 取消文件下载 |
9 | Pause | 函数 | 暂停下载 |
10 | Resume | 函数 | 恢复下载 |
根据参考文献1和3中的示例编写了测试程序,程序运行效果如下图所示(代码不再赘述,详见参考文献1和3).
还需注意,以下情况Downloader无法分块下载文件,只能采用单文件块方式串行下载文件。
参考文献:
[1]https://it.sohu.com/a/724279623_121124365
[2]https://github.com/bezzad/Downloader
[3]https://github.com/bezzad/Downloader/blob/master/src/Samples/Downloader.Sample