https://blog.csdn.net/GoForwardToStep/article/details/52704464
本文旨在修正上述博客遇到的断点下载问题:
断点之后下载的文件偏大
- 解析:
下载过程中,downloadProgress(qint64, qint64)信号触发的次数和readyRead()信号触发的次数不一样。onDownLoadProgress(qint64, qint64)槽中接收的字节数滞后了。
- 解决办法:
m_bytesCurrentReceived为当前下载的文件大小,
在onReadyRead()写文件时,实时获取当前下载的文件大小。修改如下:
void DownLoadManager::onReadyRead()
{
if (!m_isStop)
{
QFile file(m_fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Append))
{
file.write(m_reply->readAll());
m_bytesCurrentReceived = file.size();
}
file.close();
}
}
void DownLoadManager::stopDownload()
{
// 这里m_isStop变量为了保护多次点击暂停下载按钮,导致m_bytesCurrentReceived 被不停累加;
if (!m_isStop)
{
//记录当前已经下载字节数
// m_bytesCurrentReceived += m_bytesReceived;
stopWork();
}
}
https链接不支持
downloadFile(QString url , QString fileName)中对https的支持
QNetworkRequest request;
// https
if (url.startsWith("https", Qt::CaseInsensitive)) {
QSslConfiguration ssl_config;
ssl_config.setPeerVerifyMode(QSslSocket::VerifyNone);
ssl_config.setProtocol(QSsl::TlsV1_1);
request.setSslConfiguration(ssl_config);
}
request.setUrl(m_url);
注:需添加openssl相关dll 解决Qt5.12版本OpenSSL不能用问题: qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization faile