2012-12-11 23 views
1

我現在正在編寫一個Corba項目來在客戶端和服務器之間進行文件傳輸。 但是當我想要將文件從客戶端上傳到服務器時,我遇到了麻煩。如何編寫基於omniORBpy的文件傳輸程序

我定義的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) 

問題在哪裏?

回答

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字符串。

相關問題