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;
}
}
如何在下载之前获取下载大小? 因为有时我得到了损坏的文件,所以我想查看大小。
答案 0 :(得分:3)
您可以使用HTTPResponse::getContentLength()
或getContentLength64()
:
返回此消息的内容长度,如果没有Content-Length标头,则可能是UNKNOWN_CONTENT_LENGTH。
请注意,您必须先拨打HTTPClientSession::receiveResponse()
才能收到标头。您可能还需要检查HTTPResponse::getStatus()
以确认请求是否正常,如果您期望某种特定类型,则需要HTTPResponse::getContentType()
。
对于PDF,您可以检查文件本身的开始/结束标记。正确的PDF文件应以%PDF-X.Y%
开头(其中X.Y表示版本),以%%EOF
结尾,可能后跟0x0D和/或0x0A。 PDF文件可能包含多个%%EOF
标记。