如何将生成的 PDF 作为 IO 流传递给 API 而无需将其写入磁盘?
How do you pass a generated PDF to an API as an IO stream without writing it to disk?
我正在使用 PyPDF2 生成 PDF,我想将此 PDF 上传到 Cloudinary,它接受图像作为 IO 对象。
他们文档中的示例:cloudinary.uploader.upload(open('/tmp/image1.jpg', 'rb'))
在我的应用程序中,我实例化了一个 PdfFileWriter 并添加了页面:
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")
这个returns错误:
Empty file
如果我尝试传递 StringIO 对象的值:
cloudinary.uploader.upload(image_StringIO_object.getvalue(),
...)
我收到错误:
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()))
我正在使用 PyPDF2 生成 PDF,我想将此 PDF 上传到 Cloudinary,它接受图像作为 IO 对象。
他们文档中的示例:cloudinary.uploader.upload(open('/tmp/image1.jpg', 'rb'))
在我的应用程序中,我实例化了一个 PdfFileWriter 并添加了页面:
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")
这个returns错误:
Empty file
如果我尝试传递 StringIO 对象的值:
cloudinary.uploader.upload(image_StringIO_object.getvalue(),
...)
我收到错误:
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()))