Python Streamlit实现文件的上传和下载功能

 更新时间:2024年12月26日 08:33:51   作者:wang_yb  
在Web应用中,文件的上传下载是交互中不可缺少的功能,这篇文章主要为大家介绍了如何在Streamlit应用中实现文件的上传和下载功能,感兴趣的可以了解下

Web应用中,文件的上传下载是交互中不可缺少的功能。

因为在业务功能中,一般不会只有文字的交互,资料或图片的获取和分发是很常见的需求。

比如,文件上传可让用户向服务器提交数据,如上传图片分享生活、提交文档用于工作协作等,丰富应用功能。

文件下载则使用户能获取服务器端的资源,像下载软件、报告等,提升用户对应用内容的获取能力,增强用户体验和应用实用性。

本篇介绍如何在Streamlit应用中实现文件的上传下载功能。

1. 上传 st.file_uploader

Streamlit通过st.file_uploader可以很方便的实现文件上传功能。

st.file_uploader实现文件上传时,包括以下的功能:

  • 本地文件选择:创建一个文件上传组件,然后用户可通过该组件选择本地文件进行上传
  • 限制文件类型:可以指定允许上传的文件扩展名
  • 支持多文件上传:能够同时选择并上传多个文件

它的主要参数有:

名称类型说明
labelstr解释文件上传用途的简短标签
type[str]允许上传的文件扩展名数组
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)

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的主要参数有:

名称类型说明
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": [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_uploaderst.download_button组件是实现文件交互的关键工具。

使用st.file_uploader时要注意上传大小限制,合理设置标签与键值,处理好文件类型及多文件上传情况。

对于st.download_button,需留意内存占用,准确设置文件内容、名称与MIME类型,考虑按钮样式及回调函数,同时防止应用意外重新运行。

到此这篇关于Python Streamlit实现文件的上传和下载功能的文章就介绍到这了,更多相关Python Streamlit文件上传下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中的"没有那个文件"错误(FileNotFoundError)的解决方法详解

    Python中的"没有那个文件"错误(FileNotFoundError)的解决方法详解

    在Python编程中,遇到“没有那个文件”错误(FileNotFoundError)是常见的问题之一,本文将详细分析这个错误的原因,并提供实用的解决方案和指南,有需要的可以参考下
    2024-11-11
  • 如何使用python生成大量数据写入es数据库并查询操作

    如何使用python生成大量数据写入es数据库并查询操作

    这篇文章主要介绍了如何使用python生成大量数据写入es数据库并查询操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Python自定义元类的实例讲解

    Python自定义元类的实例讲解

    在本篇文章里小编给大家整理的是一篇关于Python自定义元类的实例讲解内容,有兴趣的朋友们可以学习参考下。
    2021-03-03
  • Python之 requests的使用(一)

    Python之 requests的使用(一)

    requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多,这篇文章主要介绍requests的基础用法
    2023-04-04
  • Python通过列表创建DataFrame的常见方法

    Python通过列表创建DataFrame的常见方法

    本文介绍了通过列表创建DataFrame的多种方法,包括单层/嵌套列表、指定索引、处理不均匀长度,并建议使用字典构建键对关系数据,感兴趣的朋友跟随小编一起看看吧
    2025-07-07
  • Selenium定位元素操作示例

    Selenium定位元素操作示例

    这篇文章主要介绍了Selenium定位元素操作,结合实例形式总结分析了Selenium通过ID、name、XPath、标签名称、类名等进行元素定位操作的相关实现技巧,需要的朋友可以参考下
    2018-08-08
  • Python的常用基础模块之sys模块详解

    Python的常用基础模块之sys模块详解

    这篇文章主要介绍了Python的常用基础模块之sys模块详解,sys 模块提供访问 Python 解释器使用或维护的属性,以及与 Python 解释器进行交互的方法,需要的朋友可以参考下
    2023-08-08
  • Opencv识别图片颜色并绘制轮廓实现代码示例

    Opencv识别图片颜色并绘制轮廓实现代码示例

    这篇文章主要给大家介绍了关于Opencv识别图片颜色并绘制轮廓实现的相关资料,实验代码和现象展示了如何从原始图像中识别和突出显示特定颜色区域,并通过图像处理技术增强识别效果,需要的朋友可以参考下
    2024-12-12
  • python线程安全及多进程多线程实现方法详解

    python线程安全及多进程多线程实现方法详解

    这篇文章主要介绍了python线程安全及多进程多线程实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python怎样引用其他文件夹下的py文件

    Python怎样引用其他文件夹下的py文件

    这篇文章主要介绍了Python怎样引用其他文件夹下的py文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论