Qt - HTTP下载工具

欢迎转载,请注明出处:https://blog.csdn.net/qq_39453936?spm=1010.2135.3001.5343
原文链接: https://blog.csdn.net/qq_39453936/article/details/121534586

HTTP下载器实现

  • 功能说明
  • 效果图
  • 特性
  • 实现思路
  • 核心代码
  • 测试的URL
  • demo 下载


功能说明

  • 实现HTTP文件下载;
  • 支持多任务多线程下载;
  • 支持分片式下载;
  • 支持断点下载(可暂停、重启续下载);
  • 界面交互中支持暂停,继续,取消下载等;
  • 界面交互中支持打开文件目录,打开文件,删除文件等;

效果图


特性

Qt HTTP的内部构架详解:https://blog.csdn.net/xiezhongyuan07/article/details/104293448

  • 多线程下载:当同时需要下载多个文件时(存在多个下载任务),由于存在带宽的限制,在优先级相同的情况下,多线程下载相对于单线程下载能抢占用更多的资源;

  • 分片式下载:在优先级相同的情况下,服务器对每个下载请求进行平均分配。不难理解,如创建多个请求通道的话,那下载就会更快。


实现思路

  1. 访问目标地址得到目标文件的大小等信息;
  2. 一个下载任务对应一个下载线程,把每个任务的分片点以及当前进度记录到相关下载任务文件中,当软件重新打开时读取重新构建下载目标,实现断点下载(可暂停、重启);
  3. 根据需要分片的数量,或按大小分片,算出每一段的开始点,结尾点,将目标文件分片。每个分片分区域范围向目标地址发出请求,达到分片下载的目的。
  4. 读取返回数据,写入文件中,并更新当前进度记录。
  5. 等待各分片完成下载,重命名该文件拷贝到指定下载位置。

核心代码

  • 分片方式:每片大小

    //按sliceSize大小分片创建下载
    qint64 sliceSize = m_sliceSize*1024*1024;
    qint64 seekSize = 0;
    m_httpdownloaderCount = 0;
    while(seekSize < m_fileSize)
    {
           
        qint64 startPoint = seekSize ;
        qint64 endPoint = seekSize + sliceSize;
    
        if(endPoint > m_fileSize)
            endPoint = m_fileSize;
    
     	createDownloader(m_httpdownloaderCount,startPoint, endPoint);
    
        seekSize = (endPoint+1);
        m_httpdownloaderCount++;
    }
    
  • 分片方式:分片数量

    //按m_httpdownloaderCount个下载对每个分片划分下载范围
    for (int index = 0; index < m_httpdownloaderCount; index++)
    {
           
    	qint64 startPoint = m_fileSize * index / m_httpdownloaderCount;
    	qint64 endPoint = m_fileSize * (index + 1) / m_httpdownloaderCount;
    	if (index > 0){
           
    	    startPoint += 1;
    	}	
    	createDownloader(index, startPoint, endPoint);
    }
    
  • 设置请求头信息

    QString range = QString("bytes=%1-%2").arg(m_startPoint).arg(m_endPoint);
    request.setRawHeader("Range", range.toUtf8());
    

测试的URL

  • https://stream7.iqilu.com/10339/upload_transcode/202002/16/20200216050645YIMfjPq5Nw.mp4
  • https://v-cdn.zjol.com.cn/276982.mp4
  • https://cdn-fastly.obsproject.com/downloads/OBS-Studio-27.1.3-Full-Installer-x64.exe
  • https://mirrors.tuna.tsinghua.edu.cn/qt/development_releases/qt/5.15/5.15.0-rc/single/qt-everywhere-src-5.15.0-rc.zip

demo 下载

https://gitee.com/HRlijie/qt—http-download.git


小白发文,欢迎指正

你可能感兴趣的:(Qt,qt,http,download,ui,网络协议)