1

私は現在、クライアントとサーバー間でファイル転送を行うためのCorbaプロジェクトを作成しています。しかし、クライアントからサーバーにファイルをアップロードしたいときに問題が発生します。

私が定義したIDLは次のとおりです。

interface SecretMessage
{
    string send_file(in string file_name, in string file_obj);
};

そして、クライアントコードにアップロード機能を実装しました。

f = open('SB.docx', 'rb')
data = ''
for piece in read_in_chunks(f):
    data += piece

result = mo.send_file('2.docx', data)

ファイルがプレーンなtxtファイルであれば、問題はありません。ただし、ファイルがjpg、doc、またはtxt以外のファイルの場合は、機能します。それは私にエラーを与えます:

omniORB.CORBA.BAD_PARAM: CORBA.BAD_PARAM(omniORB.BAD_PARAM_WrongPythonType, CORBA.COMPLETED_NO)

問題はどこだ?

4

1 に答える 1

2

これは、デフォルトでomniORBが文字列のASCIIデータを表示したいためだと思います。IDLをこれに変更してみてください

interface SecretMessage
{
    typedef sequence<octet> OctetSequence;
    string send_file(in string file_name, in OctetSequence file_obj);
};

IDLからPythonへのマッピングでは、オクテットシーケンスがPython文字列にマッピングされるため、Pythonクライアントコードを同じに保つことができます。

于 2012-12-12T02:08:03.977 に答える