Streamlit 實現網頁中上傳文件到 FTP 服務器

大家好,今天給大家帶來的是在網頁裏實現上傳文件到 FTP 服務器中的方法。

今天的實現效果

今天的實現代碼

import streamlit as st
import ftplib
from ftplib import error_perm
st.set_page_config(page_title="網頁版FTP上傳功能演示"layout="wide")

st.markdown("""
    <style>
    .stProgress > div > div > div > div {
        background-image:linear-gradient(to right, #99ff99, #00ccff);
    }
    </style>
"""unsafe_allow_html=True)

def progress(percent):
    bar.progress(percent)

file = st.file_uploader("請選擇要上傳的文件"accept_multiple_files=True)

if file is not None:
    if len(file)>0:
        file_name_list = []
        for m in range(len(file)):
            file_name_list.append(file[m].name)
        with st.expander("點擊查看待上傳的文件列表"):
            st.write(file_name_list)

        c1, c2 = st.columns(2)
        with c1:
            ftp_host = st.text_input("請輸入FTP服務器IP")
            ftp_port = st.number_input("請輸入服務器端口號")
        with c2:
            ftp_username = st.text_input("請輸入FTP用戶名")
            ftp_password = st.text_input("請輸入FTP用戶密碼")

        if len(ftp_host) > 0 and ftp_port > 0 and len(ftp_username) > 0 and len(ftp_password) > 0:
            ftp = ftplib.FTP(timeout=30)
            ftp.connect(ftp_host, int(ftp_port))
            try:
                ftp.login(ftp_username, ftp_password)
                if ftp.getwelcome().startswith("220"):
                    st.success("連接FTP服務器成功!")
                    ftp.cwd("FTP")
                    ftp.mkd("新上傳的文件")
                    ftp.cwd("新上傳的文件")
                    with st.form("FTP上傳"):
                        submitted = st.form_submit_button("點我開始上傳文件")
                        if submitted:
                            bar = st.progress(0)
                            if len(file_name_list) > 0:
                                for x in range(len(file_name_list)):
                                    ftp.storbinary("STOR " + str(file_name_list[x]), file[x]blocksize=8192)
                                progress(100)
                                st.success("上傳完成!")
                                with st.expander("點擊查看上傳成功的文件列表"):
                                    st.write(ftp.nlst())
                    ftp.quit()
            except error_perm:
                st.error("連接FTP失敗,請檢查輸入信息是否正確!")

今天的實現原理

1、連接 FTP 服務器使用了 ftplib 模塊,具體使用方法如下:

import ftplib

ftp_host = st.text_input("請輸入FTP服務器IP")
ftp_port = st.number_input("請輸入服務器端口號")
ftp_username = st.text_input("請輸入FTP用戶名")
ftp_password = st.text_input("請輸入FTP用戶密碼")

ftp = ftplib.FTP(timeout=30)
ftp.login(ftp_username, ftp_password)
ftp.connect(ftp_host, int(ftp_port))

上述代碼很簡單,引入 ftplib,傳入用戶名、密碼、FTP 服務器 IP、端口號即可
2、在 FTP 服務器新創建一個文件夾的方法如下:

ftp.mkd("要創建的文件夾名稱")

在 FTP 服務器上進入一個文件夾的方法如下:

ftp.cwd("要進入的文件夾名稱")

3、列出 FTP 服務器上的某個文件夾下的文件名列表方法如下:

st.write(ftp.nlst())

4、斷開 FTP 連接的方法如下:

ftp.quit()
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/r2QBOHRKrrl5RVhdjO_Z2A