锦通 发表于 2024-12-25 15:32:01

『玩转Streamlit』--上传下载文件

在Web应用中,文件的上传下载是交互中不可缺少的功能。
由于在业务功能中,一般不会只有笔墨的交互,资料或图片的获取和分发是很常见的需求。
好比,文件上传可让用户向服务器提交数据,如上传图片分享生活、提交文档用于工作协作等,丰富应用功能。
而文件下载则使用户能获取服务器端的资源,像下载软件、报告等,提升用户对应用内容的获取本领,加强用户体验和应用实用性。
本篇介绍如何在Streamlit应用中实现文件的上传和下载功能。
1. 上传 st.file_uploader

Streamlit通过st.file_uploader可以很方便的实现文件上传功能。
st.file_uploader实现文件上传时,包括以下的功能:

[*]当地文件选择:创建一个文件上传组件,然后用户可通过该组件选择当地文件进行上传
[*]限制文件类型:可以指定允许上传的文件扩展名
[*]支持多文件上传:能够同时选择并上传多个文件
它的重要参数有:
名称类型阐明labelstr表明文件上传用途的简短标签type允许上传的文件扩展名数组accept_multiple_filesbool是否允许同时上传多个文件keystr组件的唯一标识helpstr上传文件的提示信息on_changefunc文件上传时的回调函数argstuple通报给回调函数的可选参数元组kwargsdict通报给回调函数的可选参数字典label_visibilitystr标签的可见性留意,label_visibility参数是共同label一起使用的,label_visibility只有3种值:

[*]visible:这是默认值,表示正常显示label
[*]hidden:显示空占位符
[*]collapsed:不显示标签或占位符
label参数也支持一些markdown格式,可以让标签内容显示的更加丰富。
下面通过一些示例来演示上传的使用方法:
1.1. 基本使用

在这个示例中,st.file_uploader函数创建了一个文件上传组件,标签为 “选择文件”。
当用户选择并上传文件后,应用程序会显示上传文件的文件名。
import streamlit as st

uploaded_file = st.file_uploader("选择文件:")
if uploaded_file is not None:
    st.write(uploaded_file.name)https://img2024.cnblogs.com/blog/83005/202412/83005-20241225161133437-461330798.png
1.2. 上传限制

默认环境下,Streamlit 允许上传的文件大小限制为 200MB。
如果需要修改这个限制,可以通过配置server.maxUploadSize选项来实现。
比方,要将上传文件大小限制设置为 500MB,可以在Streamlit的配置文件config.toml文件中添加以下配置:

maxUploadSize = 5001.3. 允许的文件类型

通过type参数指定允许上传的文件类型。
比方,只允许上传图片文件(png 和 jpg 格式),可以这样使用:
import streamlit as st

uploaded_file = st.file_uploader("选择图片文件", type=["png", "jpg"])1.4. 上传多个文件

如果需要允许用户上传多个文件,可以将accept_multiple_files参数设置为True。
示比方下:
import streamlit as st

uploaded_files = st.file_uploader("选择多个文件:", accept_multiple_files=True)
for uploaded_file in uploaded_files:
    st.write(uploaded_file.name)1.5. 文件上传后的回调

上传文件后,可以对文件进行各种处理。
比方,可以读取文件内容、将文件保存到当地、使用文件数据进行盘算等。
以下是一个读取上传的 CSV 文件并显示数据的示例:
import streamlit as st
import pandas as pd

uploaded_file = st.file_uploader("选择 CSV 文件:")
if uploaded_file is not None:
    dataframe = pd.read_csv(uploaded_file)
    st.write(dataframe)2. 下载 st.download_button

Streamlit中一般使用st.download_button来实现文件下载功能。
当用户点击下载按钮时,可以将指定的文件内容下载到当地设备。
这一功能在许多场景中都非常实用,好比让用户下载数据报表、图片、文档等。
st.download_button的重要参数有:
名称类型阐明labelstr表明文件下载用途的简短标签datastr / bytes / file要下载文件的内容file_namestr指定下载文件的名称,若未指定则自动生成mimestr数据的 MIME 类型keystr组件的唯一标识helpstr下载文件的提示信息on_clickfunc按钮点击时的回调函数argstuple通报给回调函数的可选参数元组kwargsdict通报给回调函数的可选参数字典typestr指定按钮类型iconstr按钮标签旁显示的表情符号或图标留意,type参数只有3种类型:

[*]primary:背景为应用主色强调
[*]secondary:与背景协调
[*]tertiary:无框无背景纯文本
下面通过一些示例来演示下载的使用方法:
2.1. 基本使用

下面是一个简单的示例,展示如何使用st.download_button下载一个字符串内容的文件。
import streamlit as st

text_contents = "这是一段用来下载的文字。"
st.download_button("下载文本文件:", text_contents)2.2. 下载 CSV 文件

这个示例中,我们先将DataFrame转换为 CSV 格式的字节数据,然后通过st.download_button提供下载。
import streamlit as st
import pandas as pd

@st.cache_data
def convert_df(df):
    # 缓存转换结果,避免每次重新计算
    return df.to_csv()


df = pd.DataFrame({"col1": , "col2": ["a", "b", "c"]})
csv_data = convert_df(df)

st.download_button(
    label="下载 CSV",
    data=csv_data,
    file_name="data.csv",
    mime="text/csv",
)2.3. 下载图片文件

这个示例中,我们打开一个图片文件,以二进制读取模式读取文件内容,并将其作为data参数通报给下载按钮。
import streamlit as st

with open("image.jpg", "rb") as file:
    btn = st.download_button(
      label="下载图片",
      data=file,
      file_name="image.jpg",
      mime="image/jpeg"
    )3. 总结

总的来说,Streamlit中的st.file_uploader和st.download_button组件是实现文件交互的关键工具。
使用st.file_uploader时要留意上传大小限制,公道设置标签与键值,处理好文件类型及多文件上传环境。
对于st.download_button,需留意内存占用,准确设置文件内容、名称与MIME类型,考虑按钮样式及回调函数,同时防止应用意外重新运行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 『玩转Streamlit』--上传下载文件