【问题标题】:How to measure download percent using QNetwork?如何使用 QNetwork 测量下载百分比?
【发布时间】:2023-01-30 19:24:53
【问题描述】:

在下面的示例中,有时文件下载正确,有时,我将 qDebug() 中的这些值添加到 downloadProgress lambda 中:

Percent complete:  -1.08905e+09
Downloaded  11623330  of  -1

然后下载失败,我的意思是它保存了一个 0 字节的 zip 文件。

        QNetworkAccessManager *manager = new QNetworkAccessManager(this);

        QNetworkRequest request;
        // Random link just to test:
        request.setUrl(
            QUrl("https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n5.0.2.zip"));

        QNetworkReply *reply = manager->get(request);

        connect(reply, &QNetworkReply::downloadProgress,
            [this, reply](qint64 bytesReceived, qint64 bytesTotal)
        {
            qDebug() << "Downloaded " << bytesReceived << " of " << bytesTotal;
            double percentComplete = (bytesReceived * 100.0) / bytesTotal;
            qDebug() << "Percent complete: " << percentComplete;
        });

        connect(reply, &QNetworkReply::finished, [this, reply]() 
        {
            if (reply->error() != QNetworkReply::NoError)
            {
                qDebug() << "Error: " << reply->errorString();
            } else 
            {
                QString fileName = "C:/Users/Raja/Downloads/file.zip";
                QFile file(fileName);
                if (file.open(QIODevice::WriteOnly)) 
                {
                    file.write(reply->readAll());
                    file.close();
                    qDebug() << "File downloaded successfully";
                } else
                    qDebug() << "Error: Unable to open the file";
            }
            reply->deleteLater();
        });

我缺少什么?

【问题讨论】:

    标签: c++ qt networking


    【解决方案1】:

    你读过the documentation了吗?

    它说 bytesTotal 如果总大小未知并且是 -1

    bytesReceived等于bytesTotal时,下载完成。那时,bytesTotal不会是-1。

    换句话说:这种行为是预期的,只是意味着下载仍在进行中。当服务器不发送内容长度标头时,可能会发生这种情况。见What's the "Content-Length" field in HTTP header?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 2018-03-12
      • 2019-02-08
      • 2018-09-24
      • 2021-05-03
      • 2018-08-20
      • 2018-09-21
      相关资源
      最近更新 更多