Slightly edited to remove the account and server ID and to shorten the portion corresponding to the image, here are the contents of the network log:
Network message sent: 2008-08-24 12:57:42 -0500
URL: http://(my server)/RPC2
Method name: metaWeblog.newMediaObject
Network reply received: 2008-08-24 12:57:43 -0500
URL: http://(my server)/RPC2
Method name: metaWeblog.newMediaObject
Status code: 200
Succeeded: NO
--Fault Error--
Fault code: 8002
Fault string: function metaWeblog.newMediaObject not valid
Traceback (most recent call last):
Failure: twisted.python.failure.DefaultException: function metaWeblog.newMediaObject not valid
Request text:
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>metaWeblog.newMediaObject</methodName>
<params>
<param>
<value><string>users/(username)/weblog</string></value>
</param>
<param>
<value><string>(my username)</string></value>
</param>
<param>
<value><string>[password]</string></value>
</param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>images/testfile.png</string></value>
</member>
<member>
<name>bits</name>
<value><base64>iVBORw0KG... (long string of image contents)
...AASUVORK5CYII=</base64></value>
</member>
<member>
<name>type</name>
<value><string>image/png</string></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
Response text:
<?xml version="1.0"?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><int>8002</int></value>
</member>
<member>
<name>faultString</name>
<value><string>function metaWeblog.newMediaObject not valid
Traceback (most recent call last):
Failure: twisted.python.failure.DefaultException: function metaWeblog.newMediaObject not valid
</string></value>
</member>
</struct></value>
</fault>
</methodResponse>