- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
在Web应用中,文件的上传下载是交互中不可缺少的功能.
因为在业务功能中,一般不会只有文字的交互,资料或图片的获取和分发是很常见的需求.
比如,文件上传可让用户向服务器提交数据,如上传图片分享生活、提交文档用于工作协作等,丰富应用功能.
而文件下载则使用户能获取服务器端的资源,像下载软件、报告等,提升用户对应用内容的获取能力,增强用户体验和应用实用性.
本篇介绍如何在Streamlit应用中实现文件的上传和下载功能.
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格式,可以让标签内容显示的更加丰富.
下面通过一些示例来演示上传的使用方法:
在这个示例中,st.file_uploader函数创建了一个文件上传组件,标签为 “选择文件”.
当用户选择并上传文件后,应用程序会显示上传文件的文件名.
import streamlit as st
uploaded_file = st.file_uploader("选择文件:")
if uploaded_file is not None:
st.write(uploaded_file.name)
默认情况下,Streamlit 允许上传的文件大小限制为 200MB.
如果需要修改这个限制,可以通过配置server.maxUploadSize选项来实现.
例如,要将上传文件大小限制设置为 500MB,可以在Streamlit的配置文件config.toml文件中添加以下配置:
[server]
maxUploadSize = 500
通过type参数指定允许上传的文件类型.
例如,只允许上传图片文件(png 和 jpg 格式),可以这样使用:
import streamlit as st
uploaded_file = st.file_uploader("选择图片文件", type=["png", "jpg"])
如果需要允许用户上传多个文件,可以将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)
上传文件后,可以对文件进行各种处理.
例如,可以读取文件内容、将文件保存到本地、使用文件数据进行计算等.
以下是一个读取上传的 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)
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
:无框无背景纯文本下面通过一些示例来演示下载的使用方法:
下面是一个简单的示例,展示如何使用st.download_button下载一个字符串内容的文件.
import streamlit as st
text_contents = "这是一段用来下载的文字。"
st.download_button("下载文本文件:", text_contents)
这个示例中,我们先将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",
)
这个示例中,我们打开一个图片文件,以二进制读取模式读取文件内容,并将其作为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"
)
总的来说,Streamlit中的st.file_uploader和st.download_button组件是实现文件交互的关键工具.
使用st.file_uploader时要注意上传大小限制,合理设置标签与键值,处理好文件类型及多文件上传情况.
对于st.download_button,需留意内存占用,准确设置文件内容、名称与MIME类型,考虑按钮样式及回调函数,同时防止应用意外重新运行.
最后此篇关于『玩转Streamlit』--上传下载文件的文章就讲到这里了,如果你想了解更多关于『玩转Streamlit』--上传下载文件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
今天我在一个 Java 应用程序中看到了几种不同的加载文件的方法。 文件:/ 文件:// 文件:/// 这三个 URL 开头有什么区别?使用它们的首选方式是什么? 非常感谢 斯特凡 最佳答案 file
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个 javascript 文件,并且在该方法中有一个“测试”方法,我喜欢调用 C# 函数。 c# 函数与 javascript 文件不在同一文件中。 它位于 .cs 文件中。那么我该如何管理 j
需要检查我使用的文件/目录的权限 //filePath = path of file/directory access denied by user ( in windows ) File fil
我在一个目录中有很多 java 文件,我想在我的 Intellij 项目中使用它。但是我不想每次开始一个新项目时都将 java 文件复制到我的项目中。 我知道我可以在 Visual Studio 和
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有 3 个组件的 Twig 文件: 文件 1: {# content-here #} 文件 2: {{ title-here }} {# content-here #}
我得到了 mod_ldap.c 和 mod_authnz_ldap.c 文件。我需要使用 Linux 命令的 mod_ldap.so 和 mod_authnz_ldap.so 文件。 最佳答案 从 c
我想使用PIE在我的项目中使用 IE7。 但是我不明白的是,我只能在网络服务器上使用 .htc 文件吗? 我可以在没有网络服务器的情况下通过浏览器加载的本地页面中使用它吗? 我在 PIE 的文档中看到
我在 CI 管道中考虑这一点,我应该首先构建和测试我的应用程序,结果应该是一个 docker 镜像。 我想知道使用构建环境在构建服务器上构建然后运行测试是否更常见。也许为此使用构建脚本。最后只需将 j
using namespace std; struct WebSites { string siteName; int rank; string getSiteName() {
我是 Linux 新手,目前正在尝试使用 ginkgo USB-CAN 接口(interface) 的 API 编程功能。为了使用 C++ 对 API 进行编程,他们提供了库文件,其中包含三个带有 .
我刚学C语言,在实现一个程序时遇到了问题将 test.txt 文件作为程序的输入。 test.txt 文件的内容是: 1 30 30 40 50 60 2 40 30 50 60 60 3 30 20
如何连接两个tcpdump文件,使一个流量在文件中出现一个接一个?具体来说,我想“乘以”一个 tcpdump 文件,这样所有的 session 将一个接一个地按顺序重复几次。 最佳答案 mergeca
我有一个名为 input.MP4 的文件,它已损坏。它来自闭路电视摄像机。我什么都试过了,ffmpeg , VLC 转换,没有运气。但是,我使用了 mediainfo和 exiftool并提取以下信息
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
给定一个 gzip 文件 Z,如果我将其解压缩为 Z',有什么办法可以重新压缩它以恢复完全相同的 gzip 文件 Z?在粗略阅读了 DEFLATE 格式后,我猜不会,因为任何给定的文件都可能在 DEF
我必须从数据库向我的邮件 ID 发送一封带有附件的邮件。 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Adventure Works Admin
我有一个大的 M4B 文件和一个 CUE 文件。我想将其拆分为多个 M4B 文件,或将其拆分为多个 MP3 文件(以前首选)。 我想在命令行中执行此操作(OS X,但如果需要可以使用 Linux),而
快速提问。我有一个没有实现文件的类的项目。 然后在 AppDelegate 我有: #import "AppDelegate.h" #import "SomeClass.h" @interface A
我是一名优秀的程序员,十分优秀!