You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FastAPI从内存缓冲区生成并返回PDF文件?

解决PyFPDF生成PDF直接从内存返回的问题

你之前的代码失败原因是将字节串传给了FileResponse,而FileResponse需要的是类文件对象(如BytesIO)或本地文件路径,而非原始字节数据。以下是两种可行的实现方式:

方式一:使用FastAPI的Response类直接返回字节内容

替换原代码中写入本地文件并返回的部分:

import io
from fastapi import Response

# ... 生成pdf对象的代码(user_history、create_user_pdf等逻辑不变) ...

pdf = create_user_pdf(updated_history, start_date, end_date, days, errors)
pdf_buff = io.BytesIO()
pdf.output(pdf_buff)
pdf_buff.seek(0)  # 必须将缓冲区指针重置到开头,否则读取内容为空

return Response(
    content=pdf_buff.getvalue(),
    media_type="application/pdf",
    headers={
        "Content-Disposition": "attachment; filename=report.pdf"
    }
)

方式二:使用FileResponse传入BytesIO对象

如果偏好使用FileResponse,直接传入重置指针后的BytesIO对象即可:

import io
from fastapi import FileResponse

# ... 生成pdf对象的代码不变 ...

pdf = create_user_pdf(updated_history, start_date, end_date, days, errors)
pdf_buff = io.BytesIO()
pdf.output(pdf_buff)
pdf_buff.seek(0)

return FileResponse(
    pdf_buff,
    media_type="application/pdf",
    filename="report.pdf"
)

关键注意点

  • 调用pdf.output(pdf_buff)后必须执行pdf_buff.seek(0),否则缓冲区指针停在末尾,读取不到内容。
  • PyFPDF的output方法直接支持写入BytesIO对象,无需额外指定dest参数(默认会适配文件对象的写入逻辑)。

内容的提问来源于stack exchange,提问作者Ukhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:45:21