【问题标题】:Qt, QNetworkAccess Manager download large files fail frequentlyQt、QNetworkAccess Manager下载大文件频繁失败
【发布时间】: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)));

但是,下载经常失败,当回复完成信号被触发时,它并​​没有真正完成下载文件,而只是下载了一部分。我该怎么办?

【问题讨论】:

    标签: qt qnetworkaccessmanager qnetworkreply


    【解决方案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());
    }
    

    然后,您将下载完整的文件。 祝你好运!

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多