Qt、QNetworkAccess Manager下载大文件频繁失败
Posted
技术标签:
【中文标题】Qt、QNetworkAccess Manager下载大文件频繁失败【英文标题】:Qt, QNetworkAccess Manager download large files fail frequently 【发布时间】:2015-07-26 09:42:58 【问题描述】:我正在使用以下代码通过局域网下载一些视频文件。
QString url = "http://192.168.1.100/disk/IPCAMERA/" + downloadlist[downloadID];
QNetworkRequest newRequest(url);
QString concatenated = "admin:admin";
QByteArray data = concatenated.toLocal8Bit().toBase64();
QString headerData = "Basic " + data;
newRequest.setRawHeader("Authorization", headerData.toLocal8Bit());
newRequest.setUrl(url);
reply = networkManager->get(newRequest);
connect(reply, SIGNAL(finished()), this, SLOT(refStateChanged()), Qt::UniqueConnection);
connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(replyDownloadProgress(qint64, qint64)));
但是,下载经常失败,当回复完成信号被触发时,它并没有真正完成下载文件,而只是下载了一部分。我该怎么办?
【问题讨论】:
【参考方案1】:看来你应该先知道文件大小
QNetworkReply* 回复 = manager->head(newRequest);
【讨论】:
另一点file.open(QIODevice::WriteOnly | QIODevice::Append)
【参考方案2】:
每个回复都是字节数组的一部分,你必须添加这个连接:
connect(reply, SIGNAL(readyRead()),this, SLOT(SlotReadyRead()));
void ClassName::SlotReadyRead()
if (_file) //you must define QFile _file........
_file->write(_reply->readAll());
然后,您将下载完整的文件。 祝你好运!
【讨论】:
以上是关于Qt、QNetworkAccess Manager下载大文件频繁失败的主要内容,如果未能解决你的问题,请参考以下文章