2012-10-15 78 views
0

我正在使用SOAP將Drupal/PHP模塊上傳到Taleo(Talent Management)數據庫。這適用於常規數據,如文本和日期,但不適用於文件。肥皂:上傳二進制數據

手冊顯示文件附件的例子:

createAttachment Test Case: 
<soapenv:Header/> 
<soapenv:Body> 
<urn:createAttachment> 
<in0>webapi-5616904436472928038</in0> 
<in1>15</in1> 
<in2>test1.docx</in2> 
<in3>test1.docx</in3> 
<in4>application/vnd.openxmlformatsofficedocument. 
wordprocessingml.document</in4> 
<in5> 
<!--type: base64Binary--> 
<array>JVBERi0xLjQNJeLjz9MNCjYgMCBvYmogPDwvTGluZWFyaX==</array> 
</in5> 
</urn:createAttachment> 
</soapenv:Body> 
</soapenv:Envelope> 

所以我做了一個PHP文件是這樣的:

// Send attachment 
    $fileName = drupal_get_path('module', 'taleo') . '/test.txt'; 
    $rawFile = fread(fopen($fileName, "r"), filesize($fileName)); 
    $B64File = base64_encode($rawFile); 

    $params = array(
     'in0' => $session, 
     'in1' => $candidate_id, 
     'in2' => 'test.txt', 
     'in3' => 'test.txt', 
     'in4' => 'text/plain', 
     'in5' => $B64File 
    ); 

    $client_taleo->__call('createAttachment', $params); 

當我做 「回聲$ B64File」 我得到這個:RmlsZSB1cGxvYWQgd2l0aCBEcnVwYWwgIQ ==,所以文件正在被讀取正確。

但我總是得到這樣的錯誤:

錯誤:soapenv:Server.generalException-attBinDataArr爲空。

任何想法?

回答

2

您忘了將base64數據封裝在數組標籤中。

<array>JVBERi0xLjQNJeLjz9MNCjYgMCBvYmogPDwvTGluZWFyaX==</array> 

像這樣的東西應該工作:

$params = array(
    'in0' => $session, 
    'in1' => $candidate_id, 
    'in2' => 'test.txt', 
    'in3' => 'test.txt', 
    'in4' => 'text/plain', 
    'in5' => array('array' => $B64File) 
); 
+0

確實,但你有什麼想法,PHP代碼應該是什麼樣子?我嘗試了一切:('in5'=> $ B64File,如何封裝數組標籤? –

+0

編輯添加了更多的代碼。 – Jaif

+0

嗯,已經試過:( –

0

很顯然我必須做的陣列標籤的東西,這是肯定的。

上面的答案值得一個「upvote」,所以我給了它一個。但我自己找到了正確的答案......經過幾秒鐘的「邏輯」思考。 :)

'in5' => array('array' => $B64File)