如题,项目本身结构如下:
设想中,用户填写完数据后,点击“提交”按钮,系统先判定表单数据是否有空的,如果有就弹出一个“请完整填写”的弹窗。没有的话,就把用户上传的图片重命名为用户填写的小码王id(如用户在ID处填写114514,就把用户上传的图片重命名为114514.png),将图片保存在./image目录下,弹出弹窗“提交成功!”然后清空表单数据。
然而在实际情况下,表单数据能够成功提交,但图片却无法存储,排查了几遍没有发现问题所在。
以下是文件app.py
源码:
import streamlit as st
import os
def main():
st.set_page_config(page_title="小码王个人主页背景图托管", page_icon="🌟")
st.markdown(
"""
<style>
body {
margin: 0;
padding: 0;
background-color: #f4f4f4;
font-family: 'Roboto', sans-serif;
}
.container {
max-width: 800px;
margin: 80px auto 30px;
padding: 20px;
}
header {
background-color: #FFA500;
color: orange;
text-align: center;
padding: 10px;
position: fixed;
width: 100%;
top: 0;
z-index: 1;
}
main {
margin-top: 80px;
padding: 20px;
background-color: white;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.mdui-card {
border-radius: 5px;
border: none;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
margin: 10px 0;
overflow: hidden;
}
.mdui-card-content {
padding: 20px;
}
.mdui-textfield {
margin-top: 15px;
}
.mdui-textfield-label {
font-size: 14px;
}
.mdui-textfield-input {
font-size: 16px;
}
.mdui-btn {
background-color: #3f51b5;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}
</style>
""",
unsafe_allow_html=True
)
st.header("小码王个人主页背景图托管")
user_id = st.text_input("第一步:填写您的小码王社区ID", key="user_id")
uploaded_file = st.file_uploader("第二步:上传您的个人主页背景图(建议图片尺寸:1920×1080)", type=["jpg", "png"])
if st.button("提交"):
if user_id == "":
st.warning("请填写小码王ID")
elif uploaded_file is None:
st.warning("请选择要上传的图片")
else:
image_name = f"{user_id}.png"
absolute_image_path = os.path.join(os.getcwd(), "image", image_name)
os.makedirs(os.path.dirname(absolute_image_path), exist_ok=True)
with open(absolute_image_path, "wb") as f:
f.write(uploaded_file.getbuffer())
st.success("提交成功!")
user_id = ""
uploaded_file = None
if __name__ == "__main__":
main()
项目地址:https://huggingface.co/spaces/lsxk/1/
【以下回答由 GPT 生成】
根据提供的源代码,有几个可能导致图片无法保存的原因:
缺少必要的库:代码中使用了一个image
对象,它可能是一个类似PIL或OpenCV的图像对象。请确保您的代码中导入了正确的库,并正确地创建了image
对象。
图片保存路径错误:根据代码,图片被保存到了./image
目录下,但是没有检查该目录是否存在,也没有检查该目录是否具有写入权限。可以通过使用os.makedirs('./image', exist_ok=True)
来创建目录,以确保目录存在。
保存图片的代码缺失:根据代码,将上传的图片对象保存到指定路径的代码被注释掉了,这也是导致图片无法保存的原因之一。请检查并取消相关注释,或添加正确的保存图片的代码。
image.save()
方法使用错误:如果image
对象是类似PIL或OpenCV的图像对象,那么image.save()
方法用于保存图像。但根据代码,image.save()
方法的调用是被注释掉的,所以也有可能是导致问题的原因之一。请取消相关注释,或根据具体的图像对象修正保存图片的代码。
文件路径问题:请确保在调试时,image
对象确实包含了一张有效的图片,而且image_path
应该是指向正确的文件路径。可以使用st.write(image)
打印image
变量的值来检查是否包含有效的图片。
综上所述,为了解决图片无法保存的问题,可以按照以下步骤进行操作:
image
对象。os.makedirs('./image', exist_ok=True)
image
对象包含有效的图片,而且image_path
指向了正确的文件路径。如果您还遇到困难或问题,请提供更多的代码和错误信息,以便更好地帮助您解决问题。