2017-07-12 1 views
0

Ich verwende PyPDF2, um eine PDF zu generieren, und ich möchte diese PDF zu Cloudinary hochladen, die Bilder als IO-Objekte akzeptiert.Python: Wie übergibt man ein generiertes PDF und übergibt es als IO-Stream an ein API, ohne das generierte PDF auf den Datenträger zu schreiben?

Das Beispiel von ihren docs: cloudinary.uploader.upload(open('/tmp/image1.jpg', 'rb'))

In meiner Anwendung habe ich eine PdfFileWriter instanziiert und fügen Seiten:

output = PyPDF2.PdfFileWriter() 
output.addPage(page) 

Dann kann ich vor Ort die erzeugte PDF speichern:

outputStream = file(destination_file_name, "wb") 
output.write(outputStream) 
outputStream.close() 

Aber offensichtlich versuche ich das zu vermeiden. Stattdessen versuche ich, ein IO-Objekt zu cloudinary senden:

image_StringIO_object = StringIO.StringIO() 
output.write(image_StringIO_object) 
cloudinary.uploader.upload(image_StringIO_object, 
          api_key=CLOUDINARY_API_KEY, 
          api_secret=CLOUDINARY_API_SECRET, 
          cloud_name=CLOUDINARY_CLOUD_NAME, 
          format="PDF") 

Dieser den Fehler zurückgibt:

Empty file 

Wenn ich stattdessen versuchen, den Wert des StringIO Objekt zu übergeben:

cloudinary.uploader.upload(image_StringIO_object.getvalue(), 
          ...) 

ich den Fehler:

file() argument 1 must be encoded string without null bytes, not str 

Antwort

0

Haben Sie die Antwort von Cloudinary Unterstützung:

Das Ergebnis aus getvalue() auf dem StringIO Objekt muss mit einem Tag Base64 codiert und vorangestellt werden:

out = StringIO.StringIO() 
output.write(out) 
cloudinary.uploader.upload("data:image/pdf;base64," + 
          base64.b64encode(out.getvalue())) 
Verwandte Themen