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;
}
}
Как получить размер загрузки, прежде чем я его скачать?
Потому что иногда я получаю поврежденный файл, поэтому я хочу проверить размер.
Ты можешь использовать 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
маркеры.
Других решений пока нет …