Qt下载Url文件

Qt 专栏收录该内容
13 篇文章 0 订阅

加入网络模块

  • 在pro文件中加入:QT += network

添加头文件

  • 需要依赖写文件以及网络的头文件:
#include <QFile>
#include <QUrl>  
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QEventLoop>
#include <QTimer>

具体实现

  • 是以阻塞的方式去获取文件的,根据需要看是否要放到线程中执行。
  • 如果需要实现断点续传的功能的话则需要的请求的头中指定文件偏移的位置,以及记录本地文件的偏移位置。
/**
 * @brief 从网址下载一个文件保存
 * @param url 需要下载文件的url地址
 * @param filePath 需要保存的文件名
 * @param timeout 超时多长时间后强制退出
 * @return 返回true成功,返回false则下载失败
 */
bool downloadFileFromURL(const QString &url, const QString &filePath, int timeout = -1)
{
    QFile f(filePath);
    if (!f.open(QIODevice::WriteOnly)) {
        return false;
    }
    QNetworkAccessManager m;
    QNetworkRequest req;
    req.setUrl(QUrl(url));
    QNetworkReply *reply = m.get(req);
    QEventLoop loop;
    QTimer t;
    QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
    QObject::connect(reply, &QNetworkReply::downloadProgress,
                     [=, &f, &t](){
        f.write(reply->readAll());
        if (t.isActive()) {
            t.start(timeout);
        }
    });
    if (timeout > 0) {
        QObject::connect(&t, &QTimer::timeout, &loop, &QEventLoop::quit);
        t.start(timeout);
    }
    loop.exec();
    if (reply->error() != QNetworkReply::NoError) {
        return false;
    }
    f.close();
    delete reply;
    return true;
}`

  • 0
    点赞
  • 2
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值