9

How should I base64 encode a PDF file for transport over XML-RPC in Python?

2
  • this is really a non-question, as xmlrpclib does this for you Commented Oct 16, 2008 at 15:21
  • 2
    Actually, that fact turned out to be the answer. I just didn't know about it when I asked the question. Commented Oct 16, 2008 at 15:27

4 Answers 4

25

If you don't want to use the xmlrpclib's Binary class, you can just use the .encode() method of strings:

a = open("pdf_reference.pdf", "rb").read().encode("base64")
Sign up to request clarification or add additional context in comments.

3 Comments

Doesn't this read the entire file by calling read() before encoding it? Is that how it's supposed to work? I can't imagine encoding a multi-MB file or larger with this.
@Shurane it's a one-line example of using the encode method of strings. Optimising performance will be application specific and is left as an exercise.
this no longer works in Python 3, try this: base64.b64encode(open('path/to/your.pdf', 'rb').read()) credit: stackoverflow.com/a/43084065/5125264
5

Actually, after some more digging, it looks like the xmlrpclib module may have the piece I need with it's Binary helper class:

binary_obj = xmlrpclib.Binary( open('foo.pdf').read() )

Here's an example from the Trac XML-RPC documentation


import xmlrpclib 
server = xmlrpclib.ServerProxy("http://athomas:password@localhost:8080/trunk/login/xmlrpc") 
server.wiki.putAttachment('WikiStart/t.py', xmlrpclib.Binary(open('t.py').read())) 

Comments

2

You can do it with the base64 library, legacy interface.

Comments

0

Looks like you might be able to use the binascii module

binascii.b2a_base64(data)

Convert binary data to a line of ASCII characters in base64 coding. The return value is the converted line, including a newline char. The length of data should be at most 57 to adhere to the base64 standard.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.