我现在正在编写一个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)
问题出在哪里?
我认为
这是因为默认情况下 omniORB 希望查看字符串的 ASCII 数据。尝试将 IDL 更改为此
interface SecretMessage
{
typedef sequence<octet> OctetSequence;
string send_file(in string file_name, in OctetSequence file_obj);
};
您可以保持 Python 客户端代码相同,因为在 IDL 到 Python 的映射中,八位字节序列映射到 Python 字符串。