Как получить размер загрузки в Poco :: HTTPClientSession?

HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setTimeout(Poco::Timespan(20,0));
session.sendRequest(req);
HTTPResponse res;
istream& rs = session.receiveResponse(res);

File saveTo(request.name,File::WriteOnly,true);
char aux_buffer[1024];
rs.read(aux_buffer, 1024);
std::streamsize n = rs.gcount();
while (n > 0){
saveTo.write(aux_buffer,n);
if (rs){
rs.read(aux_buffer, 1024);
n = rs.gcount();
}
else n = 0;
}

}

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

1

Решение

Ты можешь использовать HTTPResponse::getContentLength() или же getContentLength64():

Возвращает длину содержимого для этого сообщения, которая может быть UNKNOWN_CONTENT_LENGTH, если отсутствует заголовок Content-Length.

Обратите внимание, что вы должны позвонить HTTPClientSession::receiveResponse() первым получить заголовки. Вы также можете проверить HTTPResponse::getStatus() чтобы убедиться, что запрос был в порядке и HTTPResponse::getContentType() если вы ожидаете определенного типа.

Для PDF-файлов вы можете проверить маркеры начала / конца самого файла. Правильный файл PDF должен начинаться с %PDF-X.Y% (где X.Y представляет версию) и заканчивается %%EOF возможно с последующим 0x0D и / или 0x0A. Файл PDF может содержать несколько %%EOF маркеры.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]