Http-загрузка с информацией о прогрессе, в C ++ (Poco / Boost) - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь загрузить большой файл на мой http-сервер.

И мне нужно показать ход загрузки.

Как я могу получить СКОЛЬКО БАЙТОВ, отправленных во время загрузки?

Нужно отправить события в мой графический интерфейс.

В poco, я не знаю, куда поместить обратный вызов.

_session.sendRequest(_request)
_session.receiveResponse(_response)

Есть идеи?или ссылки, спасибо !!

1 Ответ

2 голосов
/ 14 февраля 2012

Это было «частично» обсуждено в 08. Как ни странно, я ищу точно то же самое.

http://sourceforge.net/mailarchive/message.php?msg_id=20619477


РЕДАКТИРОВАТЬ: 02/14/12

Это не лучший вариант, но он работает ... вероятно, лучше всего записывать блоки по 1 Кб одновременно. Я хотел бы видеть ваши предложения.

std::string szMessage;
.... /* fill your szMessage such as with a Form.write()  */ .. 

CountingOutputStream _cos( _session.sendRequest(_request) )    
std::streamsize len = 0;

string::iterator it;
for ( it=szMessage.begin() ; it < szMessage.end(); it++ ) {
     len ++;
     _cos.put(*it);
     if(len %4096 ==0)
            cout << "len: " << len << endl;
}
cout << "Chars printed: " << len << endl;

std::istream& rsout = _session.receiveResponse(_response)
std::ostringstream ostr;
StreamCopier::copyStream(rsout, ostr);
//    Retrieve response is not necessary if we have the resp code
std::cout << endl; response.write(cout);
std::cout << ostr.str();
int code = response.getStatus();
if (code != nRespCode) {
   stringstream s;
   s << "HTTP Error(*): " << code;
   throw Poco::IOException(s.str());
}
...