首页 > 其他分享 >QT 获取下载文件大小

QT 获取下载文件大小

时间:2023-05-09 13:56:29浏览次数:48  
标签:文件大小 QT QString https reply 下载 size

1 开发环境

  • linux 版本:统信 UOS 1030(可以认为是特殊的 ubuntu)

  • 开发语言:C++

  • QT:5.9.9

2 实现代码

头文件

#include <QtNetwork>

Qt.pro 中需要加对应一行

QT += network

函数代码:

int getFileInfoSize(QString url)
{
    qDebug() << "getFileInfoSize url:" << url.toStdString();

    qint64 size = -1;

    QNetworkAccessManager manager;
    // 事件循环,等待请求文件头信息结束;
    QEventLoop loop;
    // 超时,结束事件循环;
    QTimer timer;

    // 发出 Get 请求(这个地方看你的 url 需要 get 还是 post,自己改)
    QNetworkReply *reply = manager.get(QNetworkRequest(url));
    // 忽略 SSL 错误
    reply->ignoreSslErrors();
    if (!reply) {
        qDebug() << "replay error!";
        return -1;
    }
    
    // 有数据则退出 loop
    connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit()));
    // 请求完成则退出 loop
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    // 超时则退出 loop
    connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
    
    // 超时 5s
    timer.start(1000 * 5);
    loop.exec();

    if (!timer.isActive())
    {
       // 请求超时超时,未获取到文件信息;
       qDebug() <<  "Request Timeout";
       return -1;
    }
    timer.stop();

    QVariant var = reply->header(QNetworkRequest::ContentLengthHeader);
    size = var.toLongLong();
    if (size == 0) {
        if (reply->hasRawHeader(QString("Content-Length").toUtf8()))
        {
              QString fileSize = reply->rawHeader(QString("Content-Length").toUtf8());
              LOG(INFO) << "fileSize:" << fileSize.toStdString() << " bytes";

              size = fileSize.toLongLong();
        }
    }
    qDebug() << "size:" << size << " bytes";

    reply->deleteLater();

    return size;
}

3 注意事项

如果没有报错,size = 0,可能并未触发 readyRead 信号,需要考虑此处

QNetworkReply *reply = manager.get(QNetworkRequest(url));

可以用 postman 或抓包先进行确定

4 运行效果

传入 https://www.baidu.com,效果如下:

4 参考资料

1、Qt 之 HTTP 请求 多线程分块下载——上(获取下载文件大小)- 前行中的小猪 - https://blog.csdn.net/GoForwardToStep/article/details/53159360

2、QT之HTTP下载获取文件大小信息 - 苍月代表我 - https://www.cnblogs.com/lifan3a/articles/7691974.html

标签:文件大小,QT,QString,https,reply,下载,size
From: https://www.cnblogs.com/PikapBai/p/17384329.html

相关文章

  • 【PyQt6】Python实现QComboBox显示文本与对应值不同的方法
    问题实现QComboBox显示文本与对应值不同的方法。比如下拉框显示“正确”和“错误”,但程序中想要获取“1”和“0”,但又不想再根据显示内容来判断。解决#设置combobox.addItem("正确",1)combobox.addItem("错误",0)#获取text=combobox.currentText()#正确/错误val......
  • 如何下载指定版本的node
    只需要在https://nodejs.org/dist/v16.14.2/加上指定的版本即可v16.14.2版本v16.20.0版本时间:2023-05-09午休......
  • Qt音视频开发45-音视频类结构体参数的设计
    一、前言视频监控内核组件重构和完善花了一年多时间,整个组件个人认为设计的最好的部分就是各种结构体参数的设计,而且分门别类,有枚举值,也有窗体相关的结构体参数,解码相关的结构体参数,同时将部分常用的结构体参数的获取和设置单独提供了函数,参阅海康大华等大厂的sdk的设计方式,也是......
  • 如何利用Spine制作简单的2D骨骼动画(附软件下载)
    在2D游戏中,我们经常看到各种各样的角色动画。动画能给游戏带来生机和灵气。创作一段美妙的动画,不仅需要强大的软件工具,更需要一套完善的工作流程。Spine就是一款针对游戏开发的2D骨骼动画编辑工具。Spine可以提供更高效和简洁的工作流程,以创建游戏所需的动画。下载Spine3.8.7......
  • QT设置窗口边框圆角
    1.直接设置样式  setStyleSheet("border:5pxsolidred;border-radius:10px")2.this->setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明this->setWindowFlags(Qt::FramelessWindowHint);//设置无边框窗口 voidSystemWarnDialog::paintEvent(Q......
  • 金汇战神程序小精灵App下载
    金汇战神系金汇科技出品普通牌战神程序,玩法齐全,无区域限制,高性价比高,调试安装更加快捷方便,安装时间大大缩短,适用于各种需要快速安装的场所。添加微心zscxmj咨询索取金汇战神小精灵App下载二维码链接手机上安装好金汇战神小精灵app后,连接上蓝牙后怎么使用怎么操作呢?其实很简单......
  • Maven 仓库优先加载本地的仓库jar包配置,清理无法下载的jar
    Settings-Maven-Runner-VMOptions中添加-DarchetypeCatalog=internal,优先从本地仓库读取,添加-Dmaven.wagon.http.ssl.insecure=true-Dmaven.wagon.http.ssl.allowall=true,忽略证书检查https://www.jb51.net/article/276265.htm清理本地没下载完的https://www.jb51.......
  • CMake+Visual Studio构建Qt程序
    转载:https://www.codenong.com/cs106288798/转载:https://zhuanlan.zhihu.com/p/400804242一、编写代码文件main.cpp#include<QApplication>#include"Mainwindow.h"intmain(intargc,char*argv[]){QApplicationapp(argc,argv);MainWindowmain......
  • QT5 QJson与QString相互转换
    QT5QJson与QString相互转换QString转QJsonQJsonObjectMainWindow::QstringToJson(QStringjsonString){QJsonDocumentjsonDocument=QJsonDocument::fromJson(jsonString.toLocal8Bit().data());if(jsonDocument.isNull()){qDebug()<<"StringNULL&......
  • 有关servlet实现文件下载
    废话不多说,上代码1packagecom.mlq.servlet;23importcom.sun.net.httpserver.HttpsServer;45importjavax.servlet.ServletException;6importjavax.servlet.ServletOutputStream;7importjavax.servlet.http.HttpServlet;8importjavax.servlet.http.H......