『玩转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:这是默认值,表示正常显示labelhidden:显示空占位符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类型,考虑按钮样式及回调函数,同时防止应用意外重新运行。
『玩转Streamlit』--上传下载文件的更多相关文章
- rz和sz上传下载文件工具lrzsz
######################### rz和sz上传下载文件工具lrzsz ####################################################### ...
- linux上很方便的上传下载文件工具rz和sz
linux上很方便的上传下载文件工具rz和sz(本文适合linux入门的朋友) ##########################################################&l ...
- shell通过ftp实现上传/下载文件
直接代码,shell文件名为testFtptool.sh: #!/bin/bash ########################################################## ...
- SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例
本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...
- linux下常用FTP命令 上传下载文件【转】
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- C#实现http协议支持上传下载文件的GET、POST请求
C#实现http协议支持上传下载文件的GET.POST请求using System; using System.Collections.Generic; using System.Text; usin ...
- HttpClient上传下载文件
HttpClient上传下载文件 java HttpClient Maven依赖 <dependency> <groupId>org.apache.httpcomponents ...
- 初级版python登录验证,上传下载文件加MD5文件校验
服务器端程序 import socket import json import struct import hashlib import os def md5_code(usr, pwd): ret ...
- 如何利用京东云的对象存储(OSS)上传下载文件
作者:刘冀 在公有云厂商里都有对象存储,京东云也不例外,而且也兼容S3的标准因此可以利用相关的工具去上传下载文件,本文主要记录一下利用CloudBerry Explorer for Amazon S3 ...
- SFTP上传下载文件、文件夹常用操作
SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文 ...
随机推荐
- iOSwkwebView 打开 TXT/PDF 文件乱码的问题
最近做资料文件下载下来并查看的时候,用 WKWebView 打开office 类型的文件的时候是没问题的,但是打开测试人员上传的一个 TXT/PDF 文件就出现了乱码问题,经过查看,应该是文件的编码问 ...
- axios 常见状态码
'100': 'Continue', '101': 'SwitchingProtocols', '102': 'Processing', '103': 'EarlyHints', '200': 'Ok ...
- 65.说下vue3的使用感想(说些vue3对比vue3的方便之处)
vue3 使用了组合式API,setup 替换了选项式api ,不需要在多个api里面写代码了,而且使用了setup的语法糖,可以更加方便写代码 : vue3使用proxy替代了Object.defi ...
- ABC270-d
题目 首先贪心是行不通的,考试的时候打了贪心,挂了...... 举个反例: 10 2 3 4 贪心枚举答案为4,但若高桥先选3,最大值为6. 其实考试的时候想到了dp,但是不会打 悲 因为青木也是聪明 ...
- CentOS 7.6 内网穿透服务lanproxy部署
在很多场景下内网穿透都是我们常常遇到的需求,之前也用过花生壳.ngrok.FRP 等等一些工具,但是由于限速.收费.安全各方面因素只好放弃了. 近期无意间看到 「传送门:lanproxy」 这款开源工 ...
- IO体系
IO,即in和out,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件.管道.网络连接. Java 中是通过流处理IO 的,那么什么是流? 流(Stream),是一个抽象的 ...
- 学习JavaScript第一天
文章目录 1.JavaScript简介 2.JavaScript编写的位置 2.1.内部JavaScript 2.2外部JavaScript 2.3内联JavaScript 3.JavaScript注 ...
- 管中窥豹----从String Intern中观察.NET Core到.NET 8 托管堆的变迁
简介 https://www.cnblogs.com/lmy5215006/p/18494483 在此文中,研究.NET String底层结构时,我所观察到的情况与<.NET Core底层入门& ...
- Redis数据结构:List类型全面解析
文章目录 一.List数据类型 1.1 简介 1.2 应用场景 1.3 底层结构 二.数据结构 2.1 压缩列表ZipList 2.2 双向链表LinkedList(后续已废弃) 2.3 快速链表Qu ...
- Eclipse 调试窗口无法显示,以及断点设置无效问题的解决方法
问题描述一:在下载了2020.3的Eclipse之后,调试程序,无法弹出调试窗口及变量信息. 解决方案:菜单栏:windows--show view--Other--找到Debug文件夹,可以挑选自己 ...