2015-08-27 2 views
1

Я пытаюсь отправить фото через XML_RPC как это:Revive Adserver XML_RPC Отправка изображения Содержимое

$data = array(
    'phpads55deb65dd5ca45.43027895', 
    'aImage' => array(
     'filename' => $file['aImage']['name'], 
     'content' => file_get_contents($file['aImage']['tmp_name']), 
    ), 
    'campaignId' => 1, 
    'storageType' => 'web' 
); 

$this->client = new Client('http://example.com/api/v2/xmlrpc/'); 
$this->client->call('ox.addBanner', $data); 

я получаю запрос через Скрипач ведьмой показывает это:

POST http://example.com/api/v2/xmlrpc/ HTTP/1.1 
Host: example.com 
Connection: close 
Accept-Encoding: gzip, deflate 
Content-Type: text/xml; charset=utf-8 
Content-Length: 771 
Accept: text/xml 
User-Agent: Zend_XmlRpc_Client 
<?xml version="1.0" encoding="UTF-8"?> 
<methodCall> 
    <methodName>ox.addBanner</methodName> 
    <params> 
     <param> 
      <value> 
       <string>phpads55deb65dd5ca45.43027895</string> 
      </value> 
     </param> 
     <param> 
      <value> 
       <struct> 
        <member><name>campaignId</name><value><int>1</int></value></member> 
        <member> 
         <name>bannerName</name> 
         <value> 
          <string>khgjjhj</string> 
         </value> 
        </member> 
        <member> 
         <name>aImage</name> 
         <value> 
          <struct> 
           <member> 
            <name>filename</name> 
            <value> 
             <string>logo.png</string> 
            </value> 
           </member> 
           <member> 
            <name>content</name> 
            <value> 
             <string>�PNG&#13;</string> 
            </value> 
           </member> 
          </struct> 
         </value> 
        </member> 
        <member> 
         <name>comments</name> 
         <value> 
          <string>dfgdgdfgdfg</string> 
         </value> 
        </member> 
        <member> 
         <name>storageType</name> 
         <value> 
          <string>web</string> 
         </value> 
        </member> 
       </struct> 
      </value> 
     </param> 
    </params></methodCall> 

И, как вы можете видеть, полного изображения нет в запросе. В чем проблема? Я тестировал fread вместо file_get_content, но нет никакой разницы. XML Parser отправляет эту ошибку:

ответ

0

Неверный формат значения. Я должен был изменить эту строку

'content' => file_get_contents($file['aImage']['tmp_name']), 

в

'content' => new Base64(file_get_contents($file['aImage']['tmp_name'])), 

, который нуждается в этом, чтобы быть импортированы

use Zend\XmlRpc\Value\Base64; 
1

Вы не можете вставлять двоичный контент, подобный этому в ответе XML. Вы должны рассмотреть базовую 64, кодирующую двоичное изображение, в строку базы 64. Вы можете сделать следующее:

$filename = $file['aImage']['tmp_name']; 
$data = file_get_contents($filename); 
$base64 = base64_encode($fileData); 

$data = array(
    'phpads55deb65dd5ca45.43027895', 
    'aImage' => array(
     'filename' => $filename, 
     'content' => $base64 
    ), 
    'campaignId' => 1, 
    'storageType' => 'web' 
); 
+0

Я испытал это слишком. Не работал! Проблема в том, что удаленный сервер не использует base64. А о встраивании двоичного содержимого вы достаточно корректны. – Abadis

+1

@Abadis Вы имеете в виду, что вы не можете кодировать строку? Или почему это не сработало? – Wilt

+0

Удаленный сервер - Revive Adserver. Я хочу найти, есть ли другие кодировки, которые я не тестировал, или если sth является wronge в моих кодах. Вы можете найти его здесь: http://www.revive-adserver.com/ – Abadis