Python:如何传递生成的PDF并将其作为IO流传递给API,而不将生成的PDF写入磁盘?

Python:如何传递生成的PDF并将其作为IO流传递给API,而不将生成的PDF写入磁盘?,python,pdf,io,pdf-generation,cloudinary,Python,Pdf,Io,Pdf Generation,Cloudinary,我正在使用PyPDF2生成PDF,我想将此PDF上载到,它接受图像作为IO对象 他们文档中的示例:cloudinary.uploader.upload(open('/tmp/image1.jpg','rb')) 在我的应用程序中,我实例化了一个PdfielWriter并添加页面: output = PyPDF2.PdfFileWriter() output.addPage(page) 然后我可以在本地保存生成的PDF: outputStream = file(destination_file_

我正在使用PyPDF2生成PDF,我想将此PDF上载到,它接受图像作为IO对象

他们文档中的示例:
cloudinary.uploader.upload(open('/tmp/image1.jpg','rb'))

在我的应用程序中,我实例化了一个PdfielWriter并添加页面:

output = PyPDF2.PdfFileWriter()
output.addPage(page)
然后我可以在本地保存生成的PDF:

outputStream = file(destination_file_name, "wb")
output.write(outputStream)
outputStream.close()
但很明显,我正在努力避免这种情况。相反,我尝试将IO对象发送到cloudinary:

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")
这将返回错误:

Empty file
file() argument 1 must be encoded string without null bytes, not str
如果我尝试传递StringIO对象的值:

cloudinary.uploader.upload(image_StringIO_object.getvalue(),
                           ...)
我得到一个错误:

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

从Cloudinary支持部门获得了答案:

StringIO对象上getvalue()的结果需要进行base64编码,并在前面加上标记:

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