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

相关文章:
Qt - 网络编程
Qt - 高级网络操作 HTTP/FTP

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 - HTTP下载工具相关推荐

  1. [转]使用QT开发GoogleMap瓦片显示和下载工具

    第一节 之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背 ...

  2. 文件批量下载工具(自己用QT编写)

    自己用QT编写的工具,小伙伴们随意使用. 之前因为需要从网络上下载一些图片,不想一个一个的下载,就在网上找一些可以批量下载的工具. 找了一大圈,不是收费,就是一大堆的广告. 一怒之下,决定自己搞一个下 ...

  3. Qt Creator下载和安装(详细教程)以及如何发布可执行程序

    简介 Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址:  http://www.qt.io/  也可以访问Qt项目域名:http://qt-projec ...

  4. 给Python漫画分集标题下载工具添加线程

    前情概要: 上一章,我们给这个python漫画分集标题下载工具添加了Qt界面,使用的是PySide6,大家看源码或许就可以看出来了,除了python语法不同之外,整个Qt库的使用和C++的使用几乎没什 ...

  5. 【QT】QT实现画板工具的制作

    画板工具的制作 一.实现目的 二.实验效果 三.实现思路 代码 完整代码下载 一.实现目的 使用QT实现画板工具的功能,并通过交叉编译器移植到ARM开发板上运行,通过该程序实现ARM板屏幕触摸功能的测 ...

  6. Qt的下载与安装说明(超全!)

    Qt的下载与安装说明 下载说明: 一打开浏览器输入https://www.qt.io/来到Qt的官网. 点击Developers Get Started 下滑到这这里 点击here 选择我们的需要的版 ...

  7. Qt的下载(多种下载通道+所有版本)

    参考: Qt下载(多种下载通道+所有版本)Qt 体积很大,有 1GB~3GB,官方下载通道非常慢,相信很多读者会崩溃,所以建议大家使用国内的镜像,或者使用百度网盘. 作为 Qt 下载教程,本文会同时讲 ...

  8. Qt Creator下载和安装

    简介 Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project. ...

  9. Qt Creator下载和安装(详细教程)

    简介 Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: Qt | Cross-platform software development for emb ...

最新文章

  1. lgg6 android 9,【LGG6评测】18:9奇葩比例没采用骁龙835 LG G6解析_LG G6_手机评测-中关村在线...
  2. 关于Visual Studio2019的4996错误警告解决方法
  3. 《麻省理工学院技术评论》评出最新十大突破性技术
  4. Python之路【第十四篇】:AngularJS --暂无内容-待更新
  5. Ubuntu下安装Oracle11g(图文教程)
  6. python 并发编程 多线程 目录
  7. python画k线图_Python绘制K线图
  8. Emacs默认打开任何文件为只读模式
  9. pyCharm汉化方法
  10. 10本深入学习Spring框架的最佳书籍和课程
  11. 更换计算机桌面背景的教案,《设置桌面背景》教学设计范文
  12. QT安装我i发下载存档问题解决
  13. 翻棋子游戏与Nim游戏
  14. 八数码 问题 BFS+Cantor
  15. 自动驾驶汽车的库尔雪维尔测试是不可能的挑战
  16. java高级架构师工资多少啊,附源代码
  17. matlab绘制系统的根轨迹
  18. Python读取文件时出现错误
  19. 2021极客大挑战web部分wp
  20. win 7 中的快速启动栏的设置

热门文章

  1. Ghost双系统安装工具 v1.0 绿色版
  2. 微信收到的文件怎么打印出来
  3. Carplay认证详解(二)
  4. 【Storm】Spout的storm-starter及Grouping策略、并发度讲解、网站浏览量和用户数统计
  5. Linux查看tomcat服务进程号,Linux下启动停止查看杀死Tomcat进程
  6. Firmadyne固件模拟路由器环境搭建
  7. Elasticsearch索引容量管理实践
  8. 人脸识别门禁安全吗?
  9. 教改论文 计算机,大学计算机教育教改论文.docx
  10. 【持续更新】阿里云盘扩容码!不限速!博主已经扩容超过3TB!