试图将matplotlib饼图保存到S3存储桶时,上传了空文件。

3

我想使用一些数据创建一个matplotlib饼图,然后将其保存到BytesIO并发送到我的S3存储桶中以便之后使用这个图片。操作过程中没有出现任何错误,它成功上传到我的S3并以正确的名称保存,但是文件大小为0且完全为空,尽管如果我在上传之前通过print()检查buf,则buf不为空。

async def generate_pie_chart():
    slices = [33,33,33]
    fig = Figure()
    pie = fig.subplots()
    pie.pie(slices)

    buf = BytesIO()
    fig.savefig(buf, format="png")

    S3_CLIENT.upload_fileobj(buf, S3_BUCKET, 'piee')
1个回答

5

只需在upload_fileobj()代码的上方添加以下一行:

buf.seek(0)

此方法将“光标”移到 BytesIO 的开头。在调用 upload_fileobj() 函数时,可以从文件的开头读取/上传。


是的!这解决了我的问题!谢谢。但我有一些额外的问题,我上传了一些图片到S3,没有使用.seek(0),它还是可以正常进行,尽管那些之前的图像文件大小更大,如果您能解释一下这是如何工作的,我会非常感激的。 - Nikita Beznosykov
我认为如果savefig没有包含seek,它将无法正常工作。 - jellycsc
抱歉,之前的图像是普通的PNG图像转换为字节,而不是通过savefig()创建的。 - Nikita Beznosykov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接