Zin Win Htet
Zin Win Htet

Reputation: 2565

When creating node to Drupal via XML-RPC, Image Field parameter is not submitting when others are

I'm testing XML-RPC to create a node to drupal using Post Man (chrome extension) and successfully done receiving 200 OK. But the problem is a specific field called "field_answer_with_image" is still blank in the node I created. I think something is wrong with my structure. Here's taxonomy of field_answer_with_image. enter image description here

Here's my xml structure for creating the node.

<?xml version="1.0" encoding="UTF-8"?><methodCall>
<methodName>node.create</methodName>
<params>
<param>
 <value>
  <struct>
   <member>
    <name>field_category</name>
    <value>
    <struct>
    <member>
     <name>und</name>
     <value>
      <array>
       <data>
        <value>
          <string>23</string>
        </value>
       </data>
      </array>
     </value>
     </member>
     </struct>
     </value>
     </member>
     <member>
     <name>field_email</name>
     <value>
     <string>[email protected]</string>
     </value>
     </member>
     <member>
     <name>body</name>
     <value>
     <struct>
     <member>
     <name>und</name>
     <value>
     <array>
     <data>
     <value>
     <struct>
     <member>
     <name>value</name>
     <value>
     <string>test yoo</string>
     </value>
     </member>
     </struct>
     </value>
     </data>
     </array>
     </value>
     </member>
     </struct>
     </value>
     </member>
     <member>
     <name>type</name>
     <value>
     <string>question</string>
     </value>
     </member>
     <member>
     <name>field_answer_with_image</name>
     <value>
     <struct>
     <member>
     <name>und</name>
     <value>
     <array>
     <data>
     <value>
     <struct>
     <member>
     <name>filemime</name>
     <value>
     <string>image/jpeg</string>
     </value>
     </member>
     <member>
     <name>
     title
     </name>
     <value>
     <string>
     </string>
     </value>
     </member>
     <member>
     <name>filename</name>
     <value><string>GW_temp.jpeg</string></value>
     </member>
     <member>
     <name>status</name>
     <value><string>1</string></value>
     </member>
     <member>
     <name>fid</name>
     <value><string>1611</string></value>
     </member>
     <member>
     <name>height</name>
     <value><string></string></value></member>
     <member>
     <name>width</name><value><string></string></value></member><member>
     <name>timestamp</name><value><string>1469009864</string></value></member><member>
     <name>filesize</name><value><string>10664</string></value></member><member>
     <name>uid</name><value><string>1543</string></value></member><member>
     <name>alt</name><value><string></string></value></member><member>
     <name>rdf_mapping</name><value><string></string></value></member><member>
     <name>uri</name><value><string>public://GW_temp_1.jpeg</string></value></member>
     </struct>
     </value>
     </data>
     </array>
     </value>
     </member></struct></value></member>
     <member><name>field_name</name><value><string>cristy</string></value></member></struct></value></param>

Upvotes: 0

Views: 73

Answers (1)

funkmeisterb
funkmeisterb

Reputation: 11

You need to create the image first, then create the node using the file ID in a second step.

Step 1:

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
   <methodName>file.create</methodName>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>filename</name>
                  <value>
                     <string>Dummy.jpg</string>
                  </value>
               </member>
               <member>
                  <name>filesize</name>
                  <value>
                     <int>440048</int>
                  </value>
               </member>
               <member>
                  <name>file</name>
                  <value>
                     <string>$BASE64$</string>
                  </value>
               </member>
               <member>
                  <name>filepath</name>
                  <value>
                     <string>public://Dummy.jpg</string>
                  </value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodCall>

This returns you an XML value with an 'fid' field. Find its matching 'value', an integer.

Then to create the node in step 2 (assume fid = 170):

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
   <methodName>node.create</methodName>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>type</name>
                  <value>
                     <string>dummy_content_type</string>
                  </value>
               </member>
               <member>
                  <name>title</name>
                  <value>
                     <string>Dummy&gt; 123456</string>
                  </value>
               </member>
               <member>
                  <name>field_dummy</name>
                  <value>
                     <struct>
                        <member>
                           <name>und</name>
                           <value>
                              <array>
                                 <data>
                                    <value>
                                       <struct>
                                          <member>
                                             <name>type</name>
                                             <value>
                                                <string>image</string>
                                             </value>
                                          </member>
                                          <member>
                                             <name>fid</name>
                                             <value>
                                                <string>170</string>
                                             </value>
                                          </member>
                                          <member>
                                             <name>uid</name>
                                             <value>
                                                <string>1</string>
                                             </value>
                                          </member>
                                          <member>
                                             <name>filename</name>
                                             <value>
                                                <string>Dummy.jpg</string>
                                             </value>
                                          </member>
                                          <member>
                                             <name>filesize</name>
                                             <value>
                                                <string>44408</string>
                                             </value>
                                          </member>
                                          <member>
                                             <name>filepath</name>
                                             <value>
                                                <string>public://Dummy.jpg</string>
                                             </value>
                                          </member>
                                       </struct>
                                    </value>
                                 </data>
                              </array>
                           </value>
                        </member>
                     </struct>
                  </value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodCall>

This will return a node ID similarly to the previous post request.

Works in Drupal 7.

Upvotes: 1

Related Questions