StreamLit上传文件保存至临时目录报错求解决方案
如何将Streamlit上传的文件保存到临时目录
Streamlit的UploadedFile对象没有内置的save()方法,你需要手动读取文件内容并写入到临时目录中,以下是可行的实现代码:
import tempfile import streamlit as st # 创建临时目录 temp_dir = tempfile.TemporaryDirectory() st.write(f"临时目录路径: {temp_dir.name}") uploaded_file = st.file_uploader("上传文件") if uploaded_file is not None: # 拼接临时文件的完整路径,保留原文件名避免冲突 temp_file_path = f"{temp_dir.name}/{uploaded_file.name}" # 读取上传文件的二进制内容并写入临时文件 with open(temp_file_path, "wb") as f: f.write(uploaded_file.getbuffer()) st.success(f"文件已保存到: {temp_file_path}") # 后续代码可以直接使用temp_file_path访问这个文件
关键说明
- 使用
uploaded_file.getbuffer()获取上传文件的二进制数据,这是Streamlit上传文件对象提供的读取方法 - 手动拼接临时文件路径,结合临时目录和原文件名,避免不同上传文件的命名冲突
- 用Python标准的文件写入操作完成保存,这样其他代码逻辑就能通过
temp_file_path访问已保存的文件
拓展:处理多文件上传
如果需要支持同时上传多个文件,只需修改file_uploader的参数并遍历处理:
uploaded_files = st.file_uploader("上传多个文件", accept_multiple_files=True) if uploaded_files: for file in uploaded_files: temp_file_path = f"{temp_dir.name}/{file.name}" with open(temp_file_path, "wb") as f: f.write(file.getbuffer()) st.success(f"文件 {file.name} 已保存")
内容的提问来源于stack exchange,提问作者Camol
相关产品推荐
相关产品推荐

