Qt下载http文件

这篇具有很好参考价值的文章主要介绍了Qt下载http文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这是一个有问题的版本: 

class download_file :public QObject{
    Q_OBJECT;
public:
    download_file(QString url, QString path);
    void sendRequest();
public slots:
    void requestFinished(QNetworkReply* reply);
protected:
    QNetworkAccessManager* httpMgr;
private:
    QString url, path;
};
download_file::download_file(QString url,QString path)
{
    this->url = url;
    this->path = path;
}
void download_file::sendRequest()
{
    httpMgr = new QNetworkAccessManager(this);
    QObject::connect(httpMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
    QNetworkRequest requestInfo;
    requestInfo.setUrl(QUrl(url));
    QNetworkReply *reply = httpMgr->get(requestInfo);
}
void download_file::requestFinished(QNetworkReply* reply)
{
    QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    if (statusCode.isValid())
        qDebug() << "status code=" << statusCode.toInt();

    QVariant reason = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
    if (reason.isValid())
        qDebug() << "reason=" << reason.toString();

    QNetworkReply::NetworkError err = reply->error();
    if (err != QNetworkReply::NoError) {
        qDebug() << "Failed: " << reply->errorString();
    }
    else {
        // 获取返回内容
        QByteArray ba(reply->readAll());
        //qDebug() << ba;
        //保存
        QFile file(path);
        bool ok = file.open(QIODevice::WriteOnly);
        if(ok){
            file.write(ba);
            file.close();
        }
        else {
            qDebug() << "open failed!";
        }
    }
}

当要下载的文件过大时,程序会崩溃!!!(std::bad_alloc)(所以只可以下载一些小的文件)

我认为这是ba(QByteArray)太大了,要一下子往文件中写入太多的数据,导致new失败了。

修复:

Qt 基于http的网络文件下载_qt http下载文件-CSDN博客(参考+引用)文章来源地址https://www.toymoban.com/news/detail-799914.html

class download_file :public QObject{
    Q_OBJECT;
public:
    download_file(QString url, QString path);
    void sendRequest();
public slots:
    void on_finished();
    void on_readyRead();
    void on_downloadProgress(qint64 bytesRead, qint64 totalBytes);
protected:
    QNetworkAccessManager* httpMgr;
private:
    QString url, path;
    QFile* file;
    QNetworkReply* reply;
};
download_file::download_file(QString url,QString path)
{
    this->url = url;
    this->path = path;
}
void download_file::sendRequest()
{
    httpMgr = new QNetworkAccessManager(this);

    QNetworkRequest requestInfo;
    requestInfo.setUrl(QUrl(url));
    PRINTF_LOCATION() << url;
    reply = httpMgr->get(requestInfo);
    connect(reply, &QNetworkReply::finished, this, &download_file::on_finished);
    connect(reply, &QNetworkReply::readyRead, this, &download_file::on_readyRead);
    connect(reply, &QNetworkReply::downloadProgress, this, &download_file::on_downloadProgress);
    file = new QFile(path);
    if (!file->open(QIODevice::WriteOnly))
        return;

}
void download_file::on_finished()
{
    file->close();
    delete file;
    file = nullptr;

    reply->deleteLater();
    reply = nullptr;
}
void download_file::on_downloadProgress(qint64 bytesRead, qint64 totalBytes)
{
    qDebug() << bytesRead << "   " << totalBytes;
}
void download_file::on_readyRead()
{
    file->write(reply->readAll());
}

到了这里,关于Qt下载http文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt】Qt 开发环境安装 ( Qt 版本 5.14.2 | Qt 下载 | Qt 安装 )

    Qt 开发环境下载地址 : https://download.qt.io/archive/qt/ 该界面可以下载 Qt 各个版本的开发环境 ; Qt 版本选择 , Qt 的各个大版本都在同步更新 , 如 5.1 , 5.9 , 5.14 , 6.0 等 , 每个版本都有不同的性能和功能 , 每个版本进入后的二级目录的小版本 , 尽量选择最新的版本 ; 如进入 5.14 目录后

    2024年02月14日
    浏览(68)
  • qt安装报错:下载“http://download.qt.io/online/xxxxx/_meta.7z“server replied: Bad Gateway出现网络错误

    直接双击官网上下载下来的qt安装包,然后注册登录后到了第三步【安装程序】时,进行远程检索文件总会卡在这里,无法进行到下一步。报错如下: 解决办法: 点击右上角的叉号,关闭当前的安装程序,然后从cmd里启动该安装包,并为其 切换中科大的源 打开cmd 将路径切换

    2024年02月11日
    浏览(44)
  • Qt开发笔记(Qt5.9.9下载安装环境搭建win10)

    #1 Qt下载网站(国内、国外镜像) #2 Qt5.9.9安装选项 #3 配置系统环境变量 #4 创建测试项目 #1 Qt下载网站(国内、国外镜像) 官方下载地址(慢):http://download.qt.io/ 国内镜像网站 这里给大家推荐几个国内著名的 Qt 镜像网站,主要是各个高校的: 中国科学技术大学:http://mi

    2024年02月15日
    浏览(51)
  • Qt应用开发——下载安装和HelloWorld

            工欲善其事,必先利其器。第一步环境安装好是必要的过程。Qt 在23年4月份已经更新到了6.5.0,相对于其他的工具,Qt不断在维护升级这一点就非常的友好,这里对版本的迭代更新内容不做介绍,做应用开发的话肯定是版本越新最好。官网下载的每个版本都提供了

    2024年02月16日
    浏览(49)
  • Qt详解实现TCP文件传输例子(文件下载和上传)附源码

    网络通信我们用的很频繁,如文字,语音,文件,图片等,这个些传输方式都差不多 QT文件传输主要考验对传输的控制,还是需要点逻辑的,文件传输的大致框架如下 先看一下简单例子实现的效果(界面有点丑,重点在于内容):  接下来重点讲一下需要用到哪些东西: 1.数

    2024年02月16日
    浏览(41)
  • QT支持多种开发语言

    QT主要是一个C++应用程序框架,但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Python (PyQt)  : PyQt是QT的官方Python绑定,允许Python开发者使用QT库来创建

    2024年04月29日
    浏览(49)
  • 【使用VS开发的第一个QT项目——实现相机功能(包括QT下载、配置、摄像头程序)】

    下载链接 windows程序的后缀是.exe Ubuntu程序的后缀是.run 按照安装指示操作、注册QT,然后出现”选择“界面时 勾选“MinGW 7.3.0 64-bit”,“MSVC 2017 64-bit”;点击“Developer and Designer Tools”前的尖号,打开其中选项,勾选“MinGW 7.3.0 64-bit”。 在VS\\\"工具\\\"→\\\"扩展与更新\\\"→\\\"联机\\\"中搜

    2024年02月07日
    浏览(59)
  • Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)

    接到一个需求是开发下海康的球机,控制云台,给到我的是一个开发手册,当然了是海康的私有协议 ISAPI开发手册 https://download.csdn.net/download/qq_37059136/88547425 关于开发这块读文档就可以理解了,海康使用的是摘要认证,当然了海康已经给出使用范例 通过libcurl就可以直接连接上海康的

    2024年02月04日
    浏览(49)
  • Windows11之QT开发框架超详细下载安装与使用教程

      本博客的主要内容为在Windows11系统下的QT开发框架的下载安装与使用教程,QT开发框架开发C++图形化界面十分有用,读者跟着我一步一步做一定可以安装成功,我的步骤肯定是全网最细,没人比我更细致了,就算是计算机零基础的小白也能跟着我安装成功! 进入QT开发框架

    2024年02月16日
    浏览(51)
  • Qt —— 编译Qt5版本QFTP库,并实现连接服务、获取列表、上传、下载、删除文件等操作(附源码、附基于Qt5编译好的QFTP库)

    示例效果1   示例效果2   介绍      QFTP是Qt4的库,Qt5改用了QNetworkAccessManager来代替。但是Qt5提供的QNetworkAccessManager仅支持FTP的上传和下载,所以只能 将QFTP库编译为Qt5的库来进行调用。      QFTP在Github的下载地址:https://github.com/qt/qtftp   客户端源码生成的rele

    2024年01月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包