How should I base64 encode a PDF file for transport over XML-RPC in Python?
-
this is really a non-question, as xmlrpclib does this for youuser3850– user38502008-10-16 15:21:02 +00:00Commented Oct 16, 2008 at 15:21
-
2Actually, that fact turned out to be the answer. I just didn't know about it when I asked the question.Pat Notz– Pat Notz2008-10-16 15:27:28 +00:00Commented Oct 16, 2008 at 15:27
4 Answers
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")
3 Comments
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.base64.b64encode(open('path/to/your.pdf', 'rb').read()) credit: stackoverflow.com/a/43084065/5125264Actually, 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
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.