簡體   English   中英

如何在Poco :: HTTPClientSession中獲得下載大小?

[英]How to get download size in 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;
    }

}

在下載之前如何獲得下載大小? 因為有時我得到損壞的文件,所以我想檢查大小。

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

返回此消息的內容長度,如果不存在Content-Length標頭,則可能是UNKNOWN_CONTENT_LENGTH。

注意,您必須首先調用HTTPClientSession::receiveResponse()來接收標頭。 您可能還需要檢查HTTPResponse::getStatus()以驗證請求是否正常,如果您期望特定類型,則需要檢查HTTPResponse::getContentType()

對於PDF,您可以檢查文件本身的開始/結束標記。 正確的PDF文件應以%PDF-XY% (其中XY表示版本)開頭,並以%%EOF結尾,可能后跟0x0D和/或0x0A。 PDF文件可能包含多個%%EOF標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM