Python?Streamlit實現(xiàn)文件的上傳和下載功能
在Web應(yīng)用中,文件的上傳下載是交互中不可缺少的功能。
因為在業(yè)務(wù)功能中,一般不會只有文字的交互,資料或圖片的獲取和分發(fā)是很常見的需求。
比如,文件上傳可讓用戶向服務(wù)器提交數(shù)據(jù),如上傳圖片分享生活、提交文檔用于工作協(xié)作等,豐富應(yīng)用功能。
而文件下載則使用戶能獲取服務(wù)器端的資源,像下載軟件、報告等,提升用戶對應(yīng)用內(nèi)容的獲取能力,增強用戶體驗和應(yīng)用實用性。
本篇介紹如何在Streamlit應(yīng)用中實現(xiàn)文件的上傳和下載功能。
1. 上傳 st.file_uploader
Streamlit通過st.file_uploader可以很方便的實現(xiàn)文件上傳功能。
st.file_uploader實現(xiàn)文件上傳時,包括以下的功能:
- 本地文件選擇:創(chuàng)建一個文件上傳組件,然后用戶可通過該組件選擇本地文件進行上傳
- 限制文件類型:可以指定允許上傳的文件擴展名
- 支持多文件上傳:能夠同時選擇并上傳多個文件
它的主要參數(shù)有:
| 名稱 | 類型 | 說明 |
|---|---|---|
| label | str | 解釋文件上傳用途的簡短標(biāo)簽 |
| type | [str] | 允許上傳的文件擴展名數(shù)組 |
| accept_multiple_files | bool | 是否允許同時上傳多個文件 |
| key | str | 組件的唯一標(biāo)識 |
| help | str | 上傳文件的提示信息 |
| on_change | func | 文件上傳時的回調(diào)函數(shù) |
| args | tuple | 傳遞給回調(diào)函數(shù)的可選參數(shù)元組 |
| kwargs | dict | 傳遞給回調(diào)函數(shù)的可選參數(shù)字典 |
| label_visibility | str | 標(biāo)簽的可見性 |
注意,label_visibility參數(shù)是配合label一起使用的,label_visibility只有3種值:
visible:這是默認(rèn)值,表示正常顯示labelhidden:顯示空占位符collapsed:不顯示標(biāo)簽或占位符
label參數(shù)也支持一些markdown格式,可以讓標(biāo)簽內(nèi)容顯示的更加豐富。
下面通過一些示例來演示上傳的使用方法:
1.1. 基本使用
在這個示例中,st.file_uploader函數(shù)創(chuàng)建了一個文件上傳組件,標(biāo)簽為 “選擇文件”。
當(dāng)用戶選擇并上傳文件后,應(yīng)用程序會顯示上傳文件的文件名。
import streamlit as st
uploaded_file = st.file_uploader("選擇文件:")
if uploaded_file is not None:
st.write(uploaded_file.name)

1.2. 上傳限制
默認(rèn)情況下,Streamlit 允許上傳的文件大小限制為 200MB。
如果需要修改這個限制,可以通過配置server.maxUploadSize選項來實現(xiàn)。
例如,要將上傳文件大小限制設(shè)置為 500MB,可以在Streamlit的配置文件config.toml文件中添加以下配置:
[server] maxUploadSize = 500
1.3. 允許的文件類型
通過type參數(shù)指定允許上傳的文件類型。
例如,只允許上傳圖片文件(png 和 jpg 格式),可以這樣使用:
import streamlit as st
uploaded_file = st.file_uploader("選擇圖片文件", type=["png", "jpg"])
1.4. 上傳多個文件
如果需要允許用戶上傳多個文件,可以將accept_multiple_files參數(shù)設(shè)置為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. 文件上傳后的回調(diào)
上傳文件后,可以對文件進行各種處理。
例如,可以讀取文件內(nèi)容、將文件保存到本地、使用文件數(shù)據(jù)進行計算等。
以下是一個讀取上傳的 CSV 文件并顯示數(shù)據(jù)的示例:
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來實現(xiàn)文件下載功能。
當(dāng)用戶點擊下載按鈕時,可以將指定的文件內(nèi)容下載到本地設(shè)備。
這一功能在許多場景中都非常實用,比如讓用戶下載數(shù)據(jù)報表、圖片、文檔等。
st.download_button的主要參數(shù)有:
| 名稱 | 類型 | 說明 |
|---|---|---|
| label | str | 解釋文件下載用途的簡短標(biāo)簽 |
| data | str / bytes / file | 要下載文件的內(nèi)容 |
| file_name | str | 指定下載文件的名稱,若未指定則自動生成 |
| mime | str | 數(shù)據(jù)的 MIME 類型 |
| key | str | 組件的唯一標(biāo)識 |
| help | str | 下載文件的提示信息 |
| on_click | func | 按鈕點擊時的回調(diào)函數(shù) |
| args | tuple | 傳遞給回調(diào)函數(shù)的可選參數(shù)元組 |
| kwargs | dict | 傳遞給回調(diào)函數(shù)的可選參數(shù)字典 |
| type | str | 指定按鈕類型 |
| icon | str | 按鈕標(biāo)簽旁顯示的表情符號或圖標(biāo) |
注意,type參數(shù)只有3種類型:
primary:背景為應(yīng)用主色強調(diào)secondary:與背景協(xié)調(diào)tertiary:無框無背景純文本
下面通過一些示例來演示下載的使用方法:
2.1. 基本使用
下面是一個簡單的示例,展示如何使用st.download_button下載一個字符串內(nèi)容的文件。
import streamlit as st
text_contents = "這是一段用來下載的文字。"
st.download_button("下載文本文件:", text_contents)
2.2. 下載 CSV 文件
這個示例中,我們先將DataFrame轉(zhuǎn)換為 CSV 格式的字節(jié)數(shù)據(jù),然后通過st.download_button提供下載。
import streamlit as st
import pandas as pd
@st.cache_data
def convert_df(df):
# 緩存轉(zhuǎn)換結(jié)果,避免每次重新計算
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. 下載圖片文件
這個示例中,我們打開一個圖片文件,以二進制讀取模式讀取文件內(nèi)容,并將其作為data參數(shù)傳遞給下載按鈕。
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. 總結(jié)
總的來說,Streamlit中的st.file_uploader和st.download_button組件是實現(xiàn)文件交互的關(guān)鍵工具。
使用st.file_uploader時要注意上傳大小限制,合理設(shè)置標(biāo)簽與鍵值,處理好文件類型及多文件上傳情況。
對于st.download_button,需留意內(nèi)存占用,準(zhǔn)確設(shè)置文件內(nèi)容、名稱與MIME類型,考慮按鈕樣式及回調(diào)函數(shù),同時防止應(yīng)用意外重新運行。
到此這篇關(guān)于Python Streamlit實現(xiàn)文件的上傳和下載功能的文章就介紹到這了,更多相關(guān)Python Streamlit文件上傳下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中的"沒有那個文件"錯誤(FileNotFoundError)的解決方法詳解
在Python編程中,遇到“沒有那個文件”錯誤(FileNotFoundError)是常見的問題之一,本文將詳細(xì)分析這個錯誤的原因,并提供實用的解決方案和指南,有需要的可以參考下2024-11-11
如何使用python生成大量數(shù)據(jù)寫入es數(shù)據(jù)庫并查詢操作
這篇文章主要介紹了如何使用python生成大量數(shù)據(jù)寫入es數(shù)據(jù)庫并查詢操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Python通過列表創(chuàng)建DataFrame的常見方法
本文介紹了通過列表創(chuàng)建DataFrame的多種方法,包括單層/嵌套列表、指定索引、處理不均勻長度,并建議使用字典構(gòu)建鍵對關(guān)系數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2025-07-07

