如何编写基于omniORBpy的文件传输程序

时间:2012-12-11 17:01:43

标签: python corba omniorb

我现在正在编写一个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)

问题出在哪里?

1 个答案:

答案 0 :(得分:2)

我认为这是因为默认情况下omniORB想要查看字符串的ASCII数据。尝试将IDL更改为此

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

您可以保持Python客户端代码相同,因为在IDL到Python映射中,八位位组序列映射到Python字符串。