求助:使用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
相关产品推荐
相关产品推荐

