0

base64 でエンコードされた文字列として xmlrpc 経由でファイルを送信しようとしています。

QFile sourceFile("/home/alexander/test.jpg");              

QByteArray srcRawData = sourceFile.readAll();               
QByteArray base64Encoded = srcRawData.toBase64();                        
std::string strTest(base64Encoded);

xmlrpc_c::paramList sampleAddParms;                        
sampleAddParms.add(xmlrpc_c::value_string("113957571"));   
sampleAddParms.add(xmlrpc_c::value_string(strTest));        
sampleAddParms.add(xmlrpc_c::value_string("test.jpg"));     

これをサーバーに送信すると、クライアントがエラーをスローしました: RPC 応答が失敗を示しています。パラメーターの型が正しくありません (ap_adddocument): パラメーター データに base64 が必要ですが、(Python) を取得しました。

これは xmlrpc_c::value_* のクラス定義です http://xmlrpcpp.sourceforge.net/doc/classXmlRpc_1_1XmlRpcValue.html

代わりに xmlrpc_c::value_bytestring() を使用する必要があることに気付きました。C++ でファイルをバイト文字列に変換するにはどうすればよいですか? 私はすでにByteArrayを持っています。

私はここで途方に暮れています..

4

1 に答える 1

0

あなたのコードを見ると、使用できるようですxmlrpc_c::value_string()

base64文字列を a に変換してconst char*試してください。次のコードが機能するはずです。しかし、あなたの質問にはまだ十分な詳細がありません。

QFile sourceFile("/home/alexander/test.jpg");              
QByteArray base64Encoded  = sourceFile.readAll().toBase64();                                      
const char* b64Enc = QString::fromLatin1(base64Encoded).toStdString().c_str();

xmlrpc_c::paramList sampleAddParms;                        
sampleAddParms.add(xmlrpc_c::value_string("113957571"));   
sampleAddParms.add(xmlrpc_c::value_string(b64Enc));        
sampleAddParms.add(xmlrpc_c::value_string("test.jpg"));  
于 2013-04-11T12:26:02.387 に答える