Qt - HTTP下载工具
欢迎转载,请注明出处: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
多线程下载:当同时需要下载多个文件时(存在多个下载任务),由于存在带宽的限制,在优先级相同的情况下,多线程下载相对于单线程下载能抢占用更多的资源;
分片式下载:在优先级相同的情况下,服务器对每个下载请求进行平均分配。不难理解,如创建多个请求通道的话,那下载就会更快。
实现思路
- 访问目标地址得到目标文件的大小等信息;
- 一个下载任务对应一个下载线程,把每个任务的分片点以及当前进度记录到相关下载任务文件中,当软件重新打开时读取重新构建下载目标,实现断点下载(可暂停、重启);
- 根据需要分片的数量,或按大小分片,算出每一段的开始点,结尾点,将目标文件分片。每个分片分区域范围向目标地址发出请求,达到分片下载的目的。
- 读取返回数据,写入文件中,并更新当前进度记录。
- 等待各分片完成下载,重命名该文件拷贝到指定下载位置。
核心代码
分片方式:每片大小
//按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下载工具相关推荐
- [转]使用QT开发GoogleMap瓦片显示和下载工具
第一节 之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背 ...
- 文件批量下载工具(自己用QT编写)
自己用QT编写的工具,小伙伴们随意使用. 之前因为需要从网络上下载一些图片,不想一个一个的下载,就在网上找一些可以批量下载的工具. 找了一大圈,不是收费,就是一大堆的广告. 一怒之下,决定自己搞一个下 ...
- Qt Creator下载和安装(详细教程)以及如何发布可执行程序
简介 Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-projec ...
- 给Python漫画分集标题下载工具添加线程
前情概要: 上一章,我们给这个python漫画分集标题下载工具添加了Qt界面,使用的是PySide6,大家看源码或许就可以看出来了,除了python语法不同之外,整个Qt库的使用和C++的使用几乎没什 ...
- 【QT】QT实现画板工具的制作
画板工具的制作 一.实现目的 二.实验效果 三.实现思路 代码 完整代码下载 一.实现目的 使用QT实现画板工具的功能,并通过交叉编译器移植到ARM开发板上运行,通过该程序实现ARM板屏幕触摸功能的测 ...
- Qt的下载与安装说明(超全!)
Qt的下载与安装说明 下载说明: 一打开浏览器输入https://www.qt.io/来到Qt的官网. 点击Developers Get Started 下滑到这这里 点击here 选择我们的需要的版 ...
- Qt的下载(多种下载通道+所有版本)
参考: Qt下载(多种下载通道+所有版本)Qt 体积很大,有 1GB~3GB,官方下载通道非常慢,相信很多读者会崩溃,所以建议大家使用国内的镜像,或者使用百度网盘. 作为 Qt 下载教程,本文会同时讲 ...
- Qt Creator下载和安装
简介 Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project. ...
- Qt Creator下载和安装(详细教程)
简介 Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: Qt | Cross-platform software development for emb ...
最新文章
- lgg6 android 9,【LGG6评测】18:9奇葩比例没采用骁龙835 LG G6解析_LG G6_手机评测-中关村在线...
- 关于Visual Studio2019的4996错误警告解决方法
- 《麻省理工学院技术评论》评出最新十大突破性技术
- Python之路【第十四篇】:AngularJS --暂无内容-待更新
- Ubuntu下安装Oracle11g(图文教程)
- python 并发编程 多线程 目录
- python画k线图_Python绘制K线图
- Emacs默认打开任何文件为只读模式
- pyCharm汉化方法
- 10本深入学习Spring框架的最佳书籍和课程
- 更换计算机桌面背景的教案,《设置桌面背景》教学设计范文
- QT安装我i发下载存档问题解决
- 翻棋子游戏与Nim游戏
- 八数码 问题 BFS+Cantor
- 自动驾驶汽车的库尔雪维尔测试是不可能的挑战
- java高级架构师工资多少啊,附源代码
- matlab绘制系统的根轨迹
- Python读取文件时出现错误
- 2021极客大挑战web部分wp
- win 7 中的快速启动栏的设置