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

2024-06-16 08:40:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用PyPDF2生成一个PDF,我想把这个PDF上传到Cloudinary,它接受图像作为IO对象。在

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

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

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

然后我可以在本地保存生成的PDF:

^{2}$

但显然我是想避免这种情况。相反,我尝试将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

如果我尝试传递StringIO对象的值:

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

我得到了一个错误:

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

Tags: 对象ioimageapioutputobjectpdfuploader
1条回答
网友
1楼 · 发布于 2024-06-16 08:40:06

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

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

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

相关问题 更多 >