肥皂:上传二进制数据

时间:2012-10-15 15:28:13

标签: soap upload base64 taleo

我正在制作Drupal / PHP模块,使用SOAP将信息上传到Taleo(人才管理)数据库。这适用于常规数据,如文本和日期,但不适用于文件。

本手册显示了文件附件的示例:

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 个答案:

答案 0 :(得分:2)

您忘记将base64-data封装在array-tags中。

<array>JVBERi0xLjQNJeLjz9MNCjYgMCBvYmogPDwvTGluZWFyaX==</array>

这样的事情应该有效:

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

答案 1 :(得分:0)

很明显,我必须对array-tag做一些事情,这是肯定的。

上面的答案值得一个“upvote”,所以我给了它一个。但是我自己找到了正确答案......经过几秒钟的“逻辑”思考。 :)

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