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

news/2024/12/25 16:12:25/文章来源:https://www.cnblogs.com/wang_yb/p/18630748

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

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

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

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

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

1. 上传 st.file_uploader

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

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

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

它的主要参数有:

名称 类型 说明
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种值:

  1. visible:这是默认值,表示正常显示label
  2. hidden:显示空占位符
  3. collapsed:不显示标签或占位符

label参数也支持一些markdown格式,可以让标签内容显示的更加丰富。

下面通过一些示例来演示上传的使用方法:

1.1. 基本使用

在这个示例中,st.file_uploader函数创建了一个文件上传组件,标签为 “选择文件”。

当用户选择并上传文件后,应用程序会显示上传文件的文件名。

import streamlit as stuploaded_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参数指定允许上传的文件类型。

例如,只允许上传图片文件(pngjpg 格式),可以这样使用:

import streamlit as stuploaded_file = st.file_uploader("选择图片文件", type=["png", "jpg"])

1.4. 上传多个文件

如果需要允许用户上传多个文件,可以将accept_multiple_files参数设置为True

示例如下:

import streamlit as stuploaded_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 pduploaded_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种类型:

  1. primary:背景为应用主色强调
  2. secondary:与背景协调
  3. tertiary:无框无背景纯文本

下面通过一些示例来演示下载的使用方法:

2.1. 基本使用

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

import streamlit as sttext_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 stwith 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类型,考虑按钮样式及回调函数,同时防止应用意外重新运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858695.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

renben-openstack-制作镜像操作

openstack镜像制作(用虚拟机192.168.124.6) 制作centos7镜像,OpenStack支持qcow2 ios等多种镜像规格 (1)创建镜像的硬盘 (2)删除镜像的唯一性,封装压缩 在找一个虚拟机,专门用来做镜像,需要开启虚拟化yum install -y libvirt qemu-kvm libguestfs-toolsqemu-img crea…

iPhone获取设备UDID,安装测试包

一、Safari访问获取udid网址 使用 iOS 设备的 Safari 浏览器打开 http://www.betaqr.com.cn/udid 二、安装证书 打开链接后,点击“获取UDID”三、手机配置 打开“设置” -> “通用”四、安装证书 点开证书之后五、获取UDID 安装证书之后,切换到Safari,长按出现的UDID复制…

Cursor - AI代码编辑器的使用指南

Cursor 是一个强大的 AI 代码编辑器,提供了多种功能来提升您的编程效率。本文将详细介绍如何使用 Cursor 及其主要功能,帮助您更好地利用这个工具。 1. 自动完成功能 Cursor 包含强大的自动完成功能,通过 Tab 键补全代码,可预测您的下一次编辑。启用后,它始终处于打开状态…

PbootCMS 模板常用的if条件判断语句

问题:PbootCMS模板常用的if条件判断语句。 答案:导航高亮:html{pboot:if([nav:scode]=={sort:tcode})}class="active"{/pboot:if}判断有无子菜单:html{pboot:if([nav:soncount]>0)}...{/pboot:if}二级栏目循环判断:html{pboot:nav} <li><a href=&qu…

秸秆焚烧智能监测摄像机

秸秆焚烧智能监测摄像机可以通过设置监测区域和参数,实现对秸秆焚烧情况的自动监测和报警。一旦系统检测到异常情况,比如秸秆燃烧量过大或燃烧产生大量烟尘,会立即发送警报通知相关部门,以便及时采取控制措施。秸秆焚烧智能监测摄像机可以广泛应用于农村地区的秸秆焚烧场所…

中小企业 CRM 解决方案排名:性价比之选

在如今竞争白热化的商业环境中,应用CRM系统(客户关系管理系统)可以帮助中小企业降本增效。有效的客户管理能帮助企业精准把握市场脉搏,提升客户满意度,减少客户流失,为企业的长远发展提供稳定动力。 本文从中小企业对CRM的具体需求出发,介绍4家适合中小企业的CRM供应商,…

在CAD文件中存储扩展数据

基础知识:根据CAD官方的资料看来,Database作为一个CAD文件数据库的根对象,其包含10个子对象:九大符号表(SymbolTable)和命名对象词典(NamedObjectsDictionary)。 这10个子对象属于整个数据库内的最高层级,直属于Database。除这10个子对象以外,所有DBObject对象都必须…

人员聚集监测识别摄像机

人员聚集监测识别摄像机可以通过高清晰度的摄像头和先进的人脸识别技术,准确地识别出人群中的个体,并记录下他们的行踪和行为。在人员密集的场所,如商场、车站、体育场馆等,这种摄像机能够帮助安保人员更好地掌握人员活动的情况,及时发现异常情况,有效应对突发事件。除了…

CS61B srping 2018 lab03 https://sp18.datastructur.es/

Unit Testing with JUnit, Debugging 准备 装好 CS61B插件(emmmmm,不装也没事) 把lab2 的IntList.java 复制到 lab3/IntList 文件夹. 看看关于测试的课程视频 介绍 啊? JUnit是java测试框架,现在要用JUnit进行单元测试,单元Unit就是把程序分成小块的单元,一个单元的功…

摄像机实时接入分析平台视频分析网关:如何评估视频分析系统的性能?

在当今这个数字化、智能化快速发展的时代,视频分析系统已成为安全监控、交通管理、商业智能等多个领域不可或缺的技术支撑。这些系统的性能评估对于确保其有效性和可靠性至关重要。以下是对视频分析系统性能评估的关键指标和方法的详细探讨,这些评估将帮助我们深入了解系统的…

Protocol Buffers 使用笔记

Protocol Buffers 使用笔记created: 2024-03-04T11:11+08:00 modified: 2024-11-26T15:28+08:00 published: 2024-12-25T15:30+08:00 categories: applicationsProtocol Buffers 简称 protobuf 或者 PB,要解决的问题是这样的: 在互联网上传输大量数据,如果使用 json 等类似格…

域名解析平台有哪些

在互联网的广袤世界中,域名解析平台起着至关重要的作用,它们就像是互联网的 “导航仪”,将人们易于记忆的域名转换为计算机能够理解的 IP 地址,从而确保我们能够顺利访问各类网站和在线服务。域名解析的过程就是将域名翻译为对应的 IP 地址,使得浏览器能够准确地找到服务器…