Python Streamlit实现文件的上传和下载功能
在Web
应用中,文件的上传下载是交互中不可缺少的功能。
因为在业务功能中,一般不会只有文字的交互,资料或图片的获取和分发是很常见的需求。
比如,文件上传可让用户向服务器提交数据,如上传图片分享生活、提交文档用于工作协作等,丰富应用功能。
而文件下载则使用户能获取服务器端的资源,像下载软件、报告等,提升用户对应用内容的获取能力,增强用户体验和应用实用性。
本篇介绍如何在Streamlit
应用中实现文件的上传和下载功能。
1. 上传 st.file_uploader
Streamlit
通过st.file_uploader
可以很方便的实现文件上传功能。
st.file_uploader
实现文件上传时,包括以下的功能:
- 本地文件选择:创建一个文件上传组件,然后用户可通过该组件选择本地文件进行上传
- 限制文件类型:可以指定允许上传的文件扩展名
- 支持多文件上传:能够同时选择并上传多个文件
它的主要参数有:
名称 | 类型 | 说明 |
---|---|---|
label | str | 解释文件上传用途的简短标签 |
type | [str] | 允许上传的文件扩展名数组 |
accept_multiple_files | bool | 是否允许同时上传多个文件 |
key | str | 组件的唯一标识 |
help | str | 上传文件的提示信息 |
on_change | func | 文件上传时的回调函数 |
args | tuple | 传递给回调函数的可选参数元组 |
kwargs | dict | 传递给回调函数的可选参数字典 |
label_visibility | str | 标签的可见性 |
注意,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)
1.2. 上传限制
默认情况下,Streamlit
允许上传的文件大小限制为 200MB
。
如果需要修改这个限制,可以通过配置server.maxUploadSize
选项来实现。
例如,要将上传文件大小限制设置为 500MB
,可以在Streamlit
的配置文件config.toml
文件中添加以下配置:
[server] maxUploadSize = 500
1.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
的主要参数有:
名称 | 类型 | 说明 |
---|---|---|
label | str | 解释文件下载用途的简短标签 |
data | str / bytes / file | 要下载文件的内容 |
file_name | str | 指定下载文件的名称,若未指定则自动生成 |
mime | str | 数据的 MIME 类型 |
key | str | 组件的唯一标识 |
help | str | 下载文件的提示信息 |
on_click | func | 按钮点击时的回调函数 |
args | tuple | 传递给回调函数的可选参数元组 |
kwargs | dict | 传递给回调函数的可选参数字典 |
type | str | 指定按钮类型 |
icon | str | 按钮标签旁显示的表情符号或图标 |
注意,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": [1, 2, 3], "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类型,考虑按钮样式及回调函数,同时防止应用意外重新运行。
到此这篇关于Python Streamlit实现文件的上传和下载功能的文章就介绍到这了,更多相关Python Streamlit文件上传下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
在ubuntu16.04中将python3设置为默认的命令写法
这篇文章主要介绍了在ubuntu16.04中将python3设置为默认python的方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧2018-10-10
最新评论