Streamlit上传CSV后推送至FTP服务器报TypeError如何解决
问题原因
你触发报错的核心原因是st.file_uploader返回的是Streamlit封装的UploadedFile类文件对象,不是本地磁盘的文件路径,你调用open(input_file, "rb")时给open函数传入了UploadedFile类型的参数,不符合函数要求的路径类入参规范,所以触发类型错误。
另外你的FTP上传代码还有一个隐藏问题:ftplib.FTP.storbinary方法的第一个入参需要以STOR 作为前缀,后跟远程保存的文件名,直接传文件名会导致上传失败。
修正后代码
import ftplib import pandas as pd import streamlit as st ftp_server = "ftp.test.com" ftp_username = "user" ftp_password = "password" input_file = st.file_uploader("Upload a CSV File",type=['csv']) if (input_file is not None) and input_file.name.endswith(".csv"): df = pd.read_csv(input_file, delimiter="\t", encoding = 'ISO-8859-1') st.dataframe(df) session = ftplib.FTP(ftp_server, ftp_username, ftp_password) # 直接使用UploadedFile类文件对象,无需额外open读取 session.storbinary(f"STOR {input_file.name}", input_file) session.quit() st.success(f"The {input_file.name} was successfully uploaded to the FTP server: {ftp_server}!")
补充说明
如果你的FTP服务器要求被动模式,可在创建FTP会话后添加session.set_pasv(True)配置,避免网络策略导致的上传失败。
内容的提问来源于stack exchange,提问作者Georgi Stoyanov
相关产品推荐
相关产品推荐

