linux下qt网络编程 qnetworkreply,QT网络编程之文件下载 QNetworkRequest QNetworkReply QNetworkAccessManager...

这段代码展示了如何利用QNetworkAccessManager进行文件下载。首先创建QFile对象并尝试打开用于写入的文件,接着构造QNetworkRequest并发起GET请求。当下载完成或有进度更新时,连接相应的信号槽进行处理。在下载完成后,读取回复的数据并写入文件,检查文件大小是否正确。如果出现错误,将错误信息通过信号发送。
摘要由CSDN通过智能技术生成

void FileDownLoad::start()

{

m_file = new QFile(m_filePath, this);//m_filePath下载地址

if (!m_file->open(QIODevice::WriteOnly)) {

emit result(false, tr("Write file error!\n") + m_file->errorString());

return;

}

QUrl u(m_url);

QNetworkRequest request(u);

QNetworkReply *reply = m_accessManager.get(request);

m_reply = reply;

connect(reply, SIGNAL(finished()), this, SLOT(onReplyFinished()));//处理下载结果

connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDataReadProgress(qint64,qint64)));//更新下载进度

}

void FileDownLoad::onReplyFinished()

{

QNetworkReply *reply = dynamic_cast (sender());

if (!reply){

emit result(false, "reply is null!");

return;

}

if (reply->error() != QNetworkReply::NoError) {

QString errInfo = QString("errorID:%1, errorString:%2").arg(reply->error()).arg(reply->errorString());

emit result(false, errInfo);

return;

}

QByteArray data = reply->readAll();

if (!data.isEmpty()) {

int writeBytes = m_file->write(data);

m_file->flush();

if (writeBytes != data.size()) {

emit result(false, tr("Write file error\n") + m_file->errorString());

return;

}

}

// check filesize

int contentLength = reply->header(QNetworkRequest::ContentLengthHeader).toInt();

if (contentLength == 0 || m_file->size() == 0 || contentLength != m_file->size()) {

emit result(false, tr("Network error! code 400"));

return;

}

emit result(true, "");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值