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

如何用FastAPI从内存缓冲区返回PDF?S3读取后无文件返回问题排查

解决FastAPI从S3获取PDF返回无文件的问题

你的代码返回200但没有PDF内容,核心原因是:使用s3.download_fileobj将文件写入io.BytesIO()后,字节流的指针停留在了数据流末尾,StreamingResponse从当前指针位置开始读取,自然读不到任何内容。

修正后的代码如下:

@router.post("/pdf_document")
def get_pdf(document : PDFRequest) :
    s3 = boto3.client('s3')
    file_name = document.name
    f = io.BytesIO()
    s3.download_fileobj('adm2yearsdatapdf', file_name, f)
    # 重置字节流指针到起始位置,确保能读取完整内容
    f.seek(0)
    return StreamingResponse(
        f, 
        media_type="application/pdf",
        headers={"Content-Disposition": f"attachment; filename={file_name}"}
    )

关键说明:

  • f.seek(0)是必须的操作,把字节流的读取指针移到开头,让StreamingResponse能获取到完整的PDF数据。
  • 添加Content-Disposition响应头,可以让浏览器自动识别这是PDF附件,直接触发下载或者在页面内预览,优化前端的交互体验。

内容的提问来源于stack exchange,提问作者Yafaa Ben Tili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:27:27