Qt, QNetworkAccess Manager загрузка больших файлов часто приводит к сбою

Я использую следующий код для загрузки некоторых видеофайлов через локальную сеть.

    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)));

Тем не менее, загрузка часто завершается неудачно, когда срабатывает сигнал завершения ответа, на самом деле загрузка файла не завершается, а только его часть. Что я мог сделать, чтобы справиться с этим?

2 ответа

Каждый ответ является частью Bytearray, вы должны добавить это соединение:

connect(reply, SIGNAL(readyRead()),this, SLOT(SlotReadyRead()));
void ClassName::SlotReadyRead()
{
if (_file)   //you must define QFile _file........
_file->write(_reply->readAll());
}

Затем вы загрузите полный файл. Удачи!

Кажется, вы должны сначала получить размер файла

QNetworkReply* reply = manager->head(newRequest);

Другие вопросы по тегам