2017-07-12 8 views
3

Ich arbeite derzeit mit Python3, und mein Projekt erfordert Captcha-Generierung. Mein Ziel ist es, das Captcha zu generieren und es dann als base64 zurückzugeben, damit es in JSON an den Client geliefert werden kann.Kann Captcha-Objekt nicht in Base64 konvertieren

aber ich habe Probleme bei Umwandlung in eine base64 string:

captcha=image.generate(captchatext) 
    assert isinstance(captcha, BytesIO) 
    captcha=base64.b64encode(captcha) 

gibt den Fehler:

captcha=base64.b64encode(captcha) 
    File "/usr/lib/python3.6/base64.py", line 58, in b64encode 
    encoded = binascii.b2a_base64(s, newline=False) 
TypeError: a bytes-like object is required, not '_io.BytesIO' 

Ich bin nicht ganz sicher, warum? Könnte mir jemand helfen zu verstehen, warum es nicht konvertieren wird?

Vielen Dank für jede Hilfe :)

Antwort

3

konvertieren BytesIO Objekt bytes Typen:

captcha = base64.b64encode(image.generate(captchatext).getvalue()) 

Diese Typen sind nicht austauschbar, ist BytesIO ein dateiähnliche Objekt und bytes speichert nur unveränderlichen Wert wie str

+1

'' BytesIO'' ist kein Puffer, aber es ist eine Datei, die einen Puffer als Backend verwendet. Ein Puffer ist ein Objekt, das das [Buffer Protocol] (https://docs.python.org/3/c-api/buffer.html) implementiert und kann zum Beispiel mit '' bytearray() '' erhalten werden. (Wenn BytesIO * tatsächlich ein Puffer ist, würde 'b64encode'' funktionieren, wie mit' 'base64.b64encode (bytearray())' 'oder sogar' 'base64.b64encode (numpy.zeros (20)) bestätigt werden kann. '' (ja, numpy Arrays implementieren das Pufferprotokoll und sind somit Puffer).) Der allgemeine Geist Ihrer Antwort ist jedoch korrekt, also haben Sie +1. –

Verwandte Themen