2016-04-25 3 views
0

Я искал ответ на этот вопрос, но не смог его найти.Как гарантировать, что файлы, загруженные через QNetworkAccessManager, не повреждены?

Я использую QNetworkAccessManager для загрузки файла с веб-сервера, и я хочу, чтобы этот файл загружался без какой-либо коррупции.

Я как-то внедрил контрольную сумму для каждого файла, но это может стать утомительным и может оказаться ненужным. Ранее я предполагал, что коррупция может произойти с QNetworkAccessManager. Предпосылкой является то, что объект QNetworkReply, возвращенный из вызова метода QNetworkAccessManagerget(), выдал готовый сигнал.

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

+1

Что вы подразумеваете под «поврежденным» файлом? Пробовал ли вы сигнал 'error (ошибка (QNetworkReply :: NetworkError)?? – IAmInPLS

+0

Извините, если мой вопрос был несколько неясным. Предположим, что сигнал ошибки не испущен, а готовый сигнал испущен, загружен ли файл, который затем будет завершен? (Я использую сигнал readyRead() для чтения загруженных данных) – Phat

+0

Нет, потому что готовый сигнал всегда испускается, даже если ваша загрузка файла была повреждена. Думаю, вам нужно проверить размер загружаемого файла (см. [ здесь] (http://doc.qt.io/qt-5/qnetworkreply.html#uploadProgress)) – IAmInPLS

ответ

1

TCP/IP не гарантирует безошибочную передачу данных, поэтому даже если у вас есть файл с правильным размером от QNetworkAccessManager, файл по-прежнему может быть поврежден. Вам нужно использовать хэш, который обнаруживает ошибки лучше, чем TCP/IP. Это не имеет никакого отношения к QNetworkAccessManager, ваш веб-браузер страдает от одной и той же проблемы: иногда вы получите поврежденную загрузку, даже если все по-другому кажется персиковым.

+0

Звучит разумно и было тем, что я раньше предполагал. Поэтому я все равно должен использовать хэш. – Phat

Смежные вопросы