如何将Streamlit应用的图片存储从本地切换至deta.sh数据库?
解决Streamlit应用X光影像存储到Deta.sh的方案
Deta提供专门的Drive存储服务用于存放文件(而非数据库),可以直接替换本地存储逻辑,步骤如下:
1. 安装Deta SDK
执行命令安装Deta的Python SDK:
pip install deta
2. 初始化Deta Drive
首先在Deta控制台获取你的项目密钥,然后在代码中初始化存储桶:
from deta import Deta import streamlit as st from PIL import Image import tempfile import os # 从Streamlit Secrets读取密钥(推荐),或者直接替换为你的密钥 deta = Deta(st.secrets["DETA_KEY"]) # 创建/获取名为xray_images的存储桶 xray_drive = deta.Drive("xray_images")
3. 修改上传与存储逻辑
替换原代码中的本地存储部分,改为上传到Deta Drive,同时保留图片处理逻辑:
uploaded_file = st.file_uploader("Choose an image...", type=["jpg","png","jpeg"]) if uploaded_file is not None: # 显示处理后的图片 img = Image.open(uploaded_file).resize((255,255)) st.image(img, use_column_width=False) # 上传文件到Deta Drive file_name = uploaded_file.name xray_drive.put(file_name, uploaded_file.getbuffer()) # 若processed_img需要本地文件路径,使用临时文件处理 with tempfile.NamedTemporaryFile(delete=False, suffix=file_name.split('.')[-1]) as tmp_file: tmp_file.write(uploaded_file.getbuffer()) tmp_file_path = tmp_file.name # 执行模型预测 result = processed_img(tmp_file_path) # 删除临时文件 os.unlink(tmp_file_path) # 显示预测结果 if result == "yes": st.success(result) else: st.error(result)
注意事项
- 密钥安全:不要将Deta密钥硬编码在代码中,建议使用Streamlit的
st.secrets管理,在项目根目录创建.streamlit/secrets.toml文件,写入DETA_KEY = "你的项目密钥" - 变量修正:原代码中
result == yes会报错,需改为result == "yes"(字符串形式) - 文件读取:后续若需读取已存储的图片,可使用
xray_drive.get(file_name)获取文件内容
内容的提问来源于stack exchange,提问作者Akash Kachhaway
相关产品推荐
相关产品推荐

