如何使用 QNetwork 测量下载百分比?

3
在下面的示例中,有时文件会被正确下载,有时我在 downloadProgress lambda 中添加到 qDebug() 中的这些值。
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();
        });

我缺少什么?
1个回答

1

您读过文档了吗?

文档说,如果总大小未知,则bytesTotal为-1,并且

bytesReceived等于bytesTotal时,下载完成。此时,bytesTotal将不是-1。

换句话说:这种行为是预期的,只意味着下载仍在进行中。当服务器没有发送content-length头时,可能会发生这种情况。请参见HTTP标头中的“内容长度”字段是什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接