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

Flask如何不保存文件直接返回Selenium生成的Base64编码PDF

Flask直接返回Selenium生成的PDF(无需存文件)

直接按以下步骤实现即可:

  1. 解码Base64字符串
    你拿到的pdf_string['data']是Base64编码的字符串,先把它解码成字节数据。注意有些CDP返回的字符串会带data:application/pdf;base64,前缀,需要先去掉再解码。

  2. 用BytesIO包装字节数据
    BytesIO可以把字节数据模拟成文件对象,完全在内存中操作,不用写入磁盘。

  3. 用send_file返回响应
    把BytesIO对象传给send_file,设置正确的mimetype和可选的下载参数。

完整代码示例

from flask import Flask, send_file
import base64
from io import BytesIO

app = Flask(__name__)

@app.route('/get-pdf')
def get_pdf():
    # 替换成你从Selenium CDP获取到的Base64字符串
    pdf_base64_str = pdf_string['data']
    
    # 处理可能的前缀
    if pdf_base64_str.startswith('data:application/pdf;base64,'):
        pdf_base64_str = pdf_base64_str.split(',')[1]
    
    # 解码为字节
    pdf_bytes = base64.b64decode(pdf_base64_str)
    
    # 包装成BytesIO对象,必须重置指针到开头
    pdf_io = BytesIO(pdf_bytes)
    pdf_io.seek(0)
    
    # 返回PDF:as_attachment设为True会触发下载,False则在浏览器直接打开
    return send_file(
        pdf_io,
        mimetype='application/pdf',
        as_attachment=False,
        download_name='output.pdf'
    )

if __name__ == '__main__':
    app.run(debug=True)

关键注意点

  • 必须调用seek(0):BytesIO写入字节后,文件指针会停在末尾,send_file读取时需要从开头开始,所以一定要重置指针。
  • mimetype只用application/pdf:不需要加;base64后缀,因为我们已经把Base64解码成二进制数据流了,直接返回二进制即可。
  • as_attachment参数:根据需求设置,True是让用户下载,False是在浏览器预览。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:12:12