1
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;
    }

}

如何在下载之前获取下载大小?因为有时我得到损坏的文件,所以我想检查大小。

4

1 回答 1

3

您可以使用HTTPResponse::getContentLength()getContentLength64()

返回此消息的内容长度,如果不存在 Content-Length 标头,则可能是 UNKNOWN_CONTENT_LENGTH。

请注意,您必须先调用HTTPClientSession::receiveResponse()才能接收标头。您可能还需要检查HTTPResponse::getStatus()以验证请求是否正常以及HTTPResponse::getContentType()您是否期望特定类型。

对于 PDF,您可以检查文件本身的开始/结束标记。正确的 PDF 文件应以%PDF-X.Y%(其中 XY 代表版本)开头,并以%%EOF可能后跟 0x0D 和/或 0x0A 结尾。PDF 文件可能包含多个%%EOF标记。

于 2012-11-15T17:00:16.830 回答