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博客(参考+引用)

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());
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode-53】最大子数组和(贪心动归)

LeetCode53.最大子数组和 力扣题目链接: https://leetcode.cn/problems/maximum-subarray/description/ 给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,…

第一篇:node的背景及版本的检查

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 前言 Node.js 是一个基于 Chrome V8 JavaScript 引擎…

Linux第23步_安装windows下的STM32CubeProgrammer软件和安装 DFU驱动程序

STM32CubeProgrammer软件是通过USB3.0接口烧写系统软件。 STM32CubeProgrammer需要java运行环境&#xff0c;因此需要安装JAVA软件。 Java 运行环境版本必须是 V1.7 及以上&#xff0c;一定要用 64位的&#xff0c;和win系统一致&#xff0c;否则使用 STM32CubeProgrammer烧…

微信怎么申请小程序商城?一步步教你完成

随着移动互联网的发展&#xff0c;越来越多的企业和个人开始关注微信小程序。微信小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下就能打开应用。其中&#xff0c;小程序商城因其便捷性和实用性&#xf…

吸嘴旋转对位贴合

背景&#xff1a;高精度贴片机需要在上看相机视觉定位芯片&#xff0c;芯片准确的贴合到leadframe里面。 问题&#xff1a;首先相机手眼标定后&#xff0c;已知视觉相机给出的芯片几何中心位置A1(x1,y1)&#xff0c;角度θ1&#xff0c;吸嘴几何中心的位置A2&#xff08;x2&am…

Embedding:数据的奇妙之变

在深度学习的领域&#xff0c;Embedding是连接符号与连续的一座桥梁。它通过将高维离散数据映射到低维连续向量空间&#xff0c;为大模型提供了更好的处理能力。 在这一部分&#xff0c;我们将深入研究Embedding的基本概念、作用以及在深度学习中的广泛应用。 一、向量Embedd…

如何一台电脑操作两个adb 设备

1.首先使用 adb devies 命令 2.然后使用 adb -s 上面的返回的id号 shell 进入对应的开发板

机器学习:自然语言处理介绍

机器学习在自然语言处理&#xff08;NLP&#xff09;领域扮演着关键的角色&#xff0c;它利用算法和统计模型来处理和理解人类语言。以下是一些与机器学习和自然语言处理相关的关键概念和技术&#xff1a; 文本分类&#xff1a; 机器学习可以用于对文本进行分类&#xff0c;例如…

matlab/simulink风电光伏储能虚拟同步机VSG下垂控制虚拟惯量控制,光伏变压减载控制一次调频二次调频研究,储能下垂控制SOC

非无穷大系统&#xff01; 第一个介绍风光储VSG算例研究。 其中风机采用虚拟惯性控制&#xff0c;下垂控制&#xff0c;网侧采用VSG虚拟同步机控制。储能下垂控制。 上述结果为整个系统的仿真波形&#xff0c;包括频率&#xff0c;pmsg永磁风机出力&#xff0c;储能出力&…

Python 使用类实现装饰器

一、基本原理 使用类实现装饰器的基本原理: 定义一个类&#xff0c;__init__ 方法用于初始化装饰器的状态&#xff0c; __call__ 方法用于定义在调用被装饰函数时所执行的逻辑。通过类创建一个可调用对象&#xff08;类的实例&#xff09;&#xff0c;该对象在被调用时执行 _…

批量合并PDF 文件的 5 大解决方案

PDF 可以将一个、两个、三个甚至更多的记录封装在一起&#xff0c;以显示完整的信息和用于逻辑和交互式结构化的不同元素。由于 PDF 可以提出多层结构&#xff0c;因此当用户知道如何最大化这种格式时&#xff0c;将所有文件组织到其中非常有效。正如许多经验丰富的用户和 PDF …

中国飞行模拟器行业研究与投资前景报告(2024版)

内容简介&#xff1a; 国外从事飞行模拟器研究的公司主要有加拿大航空电子设备(CAE)公司和MSI公司&#xff0c;法国的泰雷兹公司&#xff0c;美国的飞安国际公司、罗克韦尔•科林斯公司、L3技术公司和红雀模拟飞行技术公司&#xff0c;德国Simtec六自由度运动模拟系统公司等。…

c# 人脸识别的思路

在C#中实现人脸识别&#xff0c;您可以使用诸如虹软ArcFace等第三方人脸识别SDK。以下是一个基于虹软ArcFace SDK的C#人脸识别示例的大致步骤&#xff1a; 安装与引用SDK&#xff1a; 首先&#xff0c;您需要从虹软官网下载适用于C#的ArcFace人脸识别SDK&#xff0c;并将其安装…

运维大模型评测基准OpsEval发布及解读

在2023年CCF国际AIOps挑战赛暨“大模型时代的AIOps”研讨会上&#xff0c;由清华大学、中国科学院计算机网络信息中心、南开大学、必示科技、中兴通讯、中亦科技、腾讯、华为、联想、国泰君安证券、基石数据、Zabbix中国宏时数据、日志易等多家首批社区成员单位共同发布了国内首…

基于Java SSM框架实现新生入学信息管理系统项目【项目源码+论文说明】

基于java的SSM框架实现新生入学信息管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认…

基于Java SSM框架实现学生寝室管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现学生寝室管理系统演示 摘要 寝室管理设计是高校为学生提供第二课堂&#xff0c;而我们所在学院多采用半手工管理学生寝室的方式&#xff0c;所以有必要开发寝室管理系统来对进行数字化管理。既可减轻学院宿舍长工作压力&#xff0c;比较系统地对宿舍通告…

省略文字,动态行,查看更多显示全部 组件

备注&#xff1a; 使用 TypeScript 和 React的函数式组件语法。此组件的目的是显示文本&#xff0c;如果文本内容超出了指定的行数&#xff0c;它将显示一个“查看更多”的按钮。当用户点击这个按钮时&#xff0c;将展示全部的文本内容。组件使用了自定义的钩子 useBoundingCli…

JWT相关问题及答案(2024)

1、什么是 JWT&#xff0c;它通常用于什么目的&#xff1f; JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在不同实体之间安全地传输信息。它由三个部分组成&#xff1a;头部&#xff08;Header&#xff09;、载…

微信商家转账到零钱如何开通?场景说明

商家转账到零钱是什么&#xff1f; 通过商家转账到零钱这个功能&#xff0c;如果我们系统需要对用户支付费用&#xff0c;比如发放佣金、提成、退款之类的&#xff0c;可以直接转账到用户的微信零钱。 【商家转账到零钱】是【企业付款到零钱】的升级版&#xff0c;2022年5月1…

Java 开源扫雷游戏 JMine 发布新版 3.0 及介绍视频

Java 开源扫雷游戏 JMine 发布新版 3.0 及介绍视频 Java 开源扫雷游戏 JMine 是笔者开发的基于 Swing 的 Java 扫雷游戏&#xff0c;现已发布新版 3.0 及其介绍视频。视频请见&#xff1a; https://www.bilibili.com/video/BV1RK4y1z7Qz/ 老版本 JMine 1.2.5 的介绍视频请见…