2012-02-13 4 views
1

httpファイルに大きなファイルをアップロードしようとしています。C++(Poco/Boost)で進捗情報付きのHTTPアップロード

アップロードの進行状況を表示する必要があります。

アップロード中にどのようにバイトを送信すればよいですか?

GUIにイベントを送信する必要があります。

pocoでは、コールバックをどこに置くべきかわかりません。

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

またはリンク、ありがとう!

答えて

2

これは08年に「部分的に」論じられました。皮肉なことに私はまったく同じことを探しています。

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


EDIT:02/14/12

これが最善ではありませんが、それはおそらく最高の時に1kのブロックを書くことでしょう...動作します。 私はあなたの提案を見たいと思います。

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()); 
} 
+0

まだそれほど明確ではありません。 – iuwei

+0

これはあまり優雅ではないと思います。しかし、それは動作します。私はそれを私の編集に入れます。ありがとうございました! – iuwei

+0

私はバッファとしてchar buff [HALF_MB]を作成し、最後のチャンクを制御するためにcontent-lengthまたはfile-sizeを使用します:) – iuwei

関連する問題