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