Мыло: загрузка двоичных данных
Я делаю модуль Drupal/PHP для загрузки информации в базу данных Taleo (Talent Management) с использованием SOAP. Это хорошо работает с обычными данными, такими как текст и даты, но не с файлом.
В руководстве приведен пример вложения файла:
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);
Когда я делаю "echo $B64File", я получаю это: RmlsZSB1cGxvYWQgd2l0aCBEcnVwYWwgIQ==, поэтому файл читается правильно.
Но я всегда получаю эту ошибку:
ОШИБКА: soapenv:Server.generalException-attBinDataArr имеет значение null.
Есть идеи?
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)
);
Было ясно, что я должен был что-то сделать с тегом-массивом, это точно.
Ответ выше заслуживает "upvote", поэтому я дал его. Но я нашел правильный ответ сам... После нескольких секунд "логического" мышления.:)
'in5' => array('array' => $B64File)