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

求助:使用Streamlit在Chrome中渲染大体积PDF浏览组件的方法

解决Streamlit中Chrome/Edge渲染大体积PDF失效的问题

当前通过base64编码生成data URL嵌入PDF的方式,在Chrome和Edge浏览器中会因文件体积超过1MB而失效——这是Chrome对data URL的大小限制导致的,超出阈值后无法正常解析。以下是适配Chrome/Edge的可行方案:

解决方案思路

绕过data URL的大小限制,将上传的PDF文件保存为本地静态资源,通过静态资源URL直接渲染PDF,确保大体积文件也能在Chrome/Edge中正常显示。

步骤1:配置Streamlit静态文件目录

在项目根目录创建.streamlit/config.toml文件,添加配置指定静态文件存放目录:

[server]
static_dir = "static"

步骤2:实现PDF渲染代码

import streamlit as st
from pathlib import Path
from datetime import datetime

# 确保静态目录存在
static_dir = Path("static")
static_dir.mkdir(exist_ok=True)

uploaded_file = st.file_uploader("上传PDF文件", type=["pdf"])
if uploaded_file:
    # 生成带时间戳的文件名,避免重复覆盖
    timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
    safe_filename = f"{timestamp}_{uploaded_file.name}"
    pdf_save_path = static_dir / safe_filename

    # 将上传文件写入静态目录
    with open(pdf_save_path, "wb") as f:
        f.write(uploaded_file.getbuffer())

    # 构造静态资源访问URL
    pdf_url = f"/static/{safe_filename}"

    # 用iframe渲染PDF,适配Chrome/Edge
    st.components.v1.html(
        f'<iframe src="{pdf_url}" width="100%" height="1000" frameborder="0" type="application/pdf"></iframe>',
        height=1000
    )

注意事项

  • 静态目录下的文件会长期留存,可定期手动清理static目录,或在代码中添加自动清理过期文件的逻辑。
  • 线上部署时需确保静态目录的访问权限配置正确,避免资源无法加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:35:54