# How to send a file via XML RPC

**URL:** <https://www.ruby-forum.com/t/how-to-send-a-file-via-xml-rpc/134902>\
**Category:** Ruby\
**Created:** [April 16, 2008, 1:57am UTC](https://www.ruby-forum.com/t/how-to-send-a-file-via-xml-rpc/134902 "2008-04-16T01:57:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![e\_deleflie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/858c86/32.png) [@e\_deleflie](https://www.ruby-forum.com/u/e_deleflie)\
**Post date:** [April 16, 2008, 1:57am UTC](https://www.ruby-forum.com/t/how-to-send-a-file-via-xml-rpc/134902/1 "2008-04-16T01:57:35Z")

</div>

Does anyone have some sample code showing how to send a file via XML  
RPC?

Sending string values is easy … like the below example…

server = XMLRPC::Client.new2(“[http://rpc.technorati.com/rpc/ping](http://rpc.technorati.com/rpc/ping)”)  
result = server.call(“weblogUpdates.ping”, “Copenhagen.rb”,  
"[http://www.copenhagenrb.dk/](http://www.copenhagenrb.dk/)

… but how would one send a file?

Etienne

---

<div class="post-metadata">

**Author:** ![e\_deleflie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/858c86/32.png) [@e\_deleflie](https://www.ruby-forum.com/u/e_deleflie)\
**Post date:** [April 16, 2008, 2:32pm UTC](https://www.ruby-forum.com/t/how-to-send-a-file-via-xml-rpc/134902/2 "2008-04-16T14:32:00Z")

</div>

On Apr 15, 2008, at 6:56 PM, e deleflie wrote:

> Does anyone have some sample code showing how to send a file via XML  
> RPC?

I can’t remember where I first saw this.

$ cat client.rb  
#!/usr/bin/ruby

require ‘xmlrpc/client’  
require ‘base64’

data = IO.read(’/tmp/test.jpg’)  
encoded\_file = Base64.encode64(data)

server = XMLRPC::Client.new3({‘host’=\>‘localhost’, ‘port’=\>8888,  
‘timeout’=\>30})

if server.call(“put\_file”, encoded\_file)  
puts “ok”  
end  
puts result

$ cat server.rb  
#!/usr/bin/ruby

$SAFE = 1

require “xmlrpc/server”  
require ‘base64’

s = XMLRPC::Server.new(8888)  
s.add\_handler(“put\_file”) { |encoded\_file|  
Dir.chdir(’/tmp/test’)  
File.open(‘test.jpg’, ‘w+’) { |file|  
file.puts( Base64.decode64(encoded\_file) )  
}  
true  
}

s.serve

---

<div class="post-metadata">

**Author:** ![e\_deleflie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/858c86/32.png) [@e\_deleflie](https://www.ruby-forum.com/u/e_deleflie)\
**Post date:** [April 16, 2008, 4:11pm UTC](https://www.ruby-forum.com/t/how-to-send-a-file-via-xml-rpc/134902/3 "2008-04-16T16:11:21Z")

</div>

bingo! … … just needed to encode the binary data into base64  
before sending it (and do the reverse at the server end).

thanks  
Etienne
