4
Как загрузить большой файл в кусках параллельно в Qt. Так что время загрузки файла уменьшается.Как загрузить большой файл быстро в Qt
Как загрузить большой файл в кусках параллельно в Qt. Так что время загрузки файла уменьшается.Как загрузить большой файл быстро в Qt
Предполагая, что вы используете QNetwork и загрузить это HTTP GET вам нужно будет сделать следующее:
Content-Length
) и проверьте сервер поддерживает запросы Range (Accept-Ranges
)Range
заголовок на основе размера содержимогоЧтобы включить HTTP конвейерную на ваши запросы, установив атрибут HttpPipeliningAllowedAttribute
:
QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
Установить заголовки диапазон:
req.setRawHeader("Range", "bytes=0-499");
Я пытался выяснить размер файла, используя следующий код, но не повезло. Пожалуйста, дайте мне знать, что с ним не так. \t QNetworkAccessManager * mngr = new QNetworkAccessManager(); \t QNetworkRequest rqst (url); \t QNetworkReply * rply = mngr-> head (rqst); \t int length = rply-> header (QNetworkRequest :: ContentLengthHeader) .toInt(); – user1111
Запрос не блокирует, вам нужно дождаться сигнала 'QNetworkAccessManager :: finished' или' QNetworkReply :: finished' (или 'QNetworkReply :: metaDataChanged' для GET), прежде чем вы сможете получить доступ к заголовкам HTTP. Пожалуйста, прочитайте [документацию для QNetworkAccessManager] (http://qt-project.org/doc/qt-4.8/qnetworkaccessmanager.html#details) или посмотрите на это [учебное пособие] (http://www.developer.nokia .com/сообщество/Wiki/Creating_an_HTTP_network_request_in_Qt_using_QNetworkAccessManager, _QNetworkRequest, _QNetworkReply). –
Когда я указываю неправильный URL (например: «http://10.70.22.200:8080/Install_T.msi» вместо «http://10.70.22.200:8080/Install_Test.msi»), размер заголовка показывает некоторое значение (в этом случае 990) {size = answery-> header (QNetworkRequest :: ContentLengthHeader) .toLongLong();} Когда я указываю неправильный URL, я ожидал, что заголовок будет равен нулю, так как файл не существует. Таким образом, я не могу проверить, существует ли файл, прежде чем продолжить загрузку файла. – user1111