10

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

Constantin
  • 27,478
  • 10
  • 60
  • 79
Pat Notz
  • 208,672
  • 30
  • 90
  • 92

4 Answers4

26

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")
Tony Meyer
  • 10,079
  • 6
  • 41
  • 47
  • 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. – Ehtesh Choudhury Aug 07 '11 at 18:50
  • 5
    @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. – Tony Meyer Aug 08 '11 at 00:28
  • 2
    this no longer works in Python 3, try this: `base64.b64encode(open('path/to/your.pdf', 'rb').read())` credit: https://stackoverflow.com/a/43084065/5125264 – Matt Oct 19 '21 at 17:22
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())) 
Pat Notz
  • 208,672
  • 30
  • 90
  • 92
2

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

johnstok
  • 96,212
  • 12
  • 54
  • 76
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.

Community
  • 1
  • 1
Sam Corder
  • 5,374
  • 3
  • 25
  • 30