Qt5 - 从Url下载文件时获取内容的长度
问题描述:
我使用Get方法从Url下载“.apk”文件。 该文件已成功从服务器上下载到我的磁盘上。 我实际上想要将一个进度条添加到我的程序中。问题是:我可以显示bytesReceived,但无法显示我正在下载的文件(ContentLenth)的总字节数。我怎样才能从服务器取得它。Qt5 - 从Url下载文件时获取内容的长度
这里是我得到我的qDebug同时下载:
3498 of -1
799062 of -1
1923737 of -1
3037550 of -1
3200231 of 3200231
这里是我的代码:
void DownloadApk::LaunchDownload()
{
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("proxy");
proxy.setPort(8080);
QNetworkProxy::setApplicationProxy(proxy);
QUrl url("I put my Url here");
QNetworkRequest request(url);
_file = new QFile("C:/Users/Desktop/testdownload/downloadedFile.apk");
_file->open(QIODevice::WriteOnly);
QNetworkAccessManager *_manager= new QNetworkAccessManager;
_reply = _manager->get(request);// Manager is my QNetworkAccessManager
_file->write(_reply->readAll());
connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(error(QNetworkReply::NetworkError)));
connect(_reply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateProgress(qint64, qint64)));
connect(_reply, SIGNAL(finished()),
this, SLOT(finished()));
}
void DownloadApk::error(QNetworkReply::NetworkError err)
{qDebug() << err;
// Manage error here.
_reply->deleteLater();
}
void DownloadApk::updateProgress(qint64 read, qint64 total)
{
qDebug() << read <<"of"<<total ;
QByteArray b = _reply->readAll();
QDataStream out(_file);
out << b;
}
void DownloadApk::finished()
{
QMessageBox::information(this, tr("Complete"), tr("Successfully Downloaded"));
// Done
_reply->deleteLater();
_file->close();
// probably delete the file object too
}
答
我解决了这一问题。其实这不是QT问题。这个Qt代码正常工作。 问题来自未在应答标题上发送ContentLenth的服务器。
服务器是否向您提供内容长度?你有一个wireshark跟踪来支持它吗? –
你说得对!我教过contentLength是在http头上自动发送的。显然我错了。我纠正了我的API。这个Qt代码正常工作。感谢您的时间@Kuba Ober – Chakib