You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:39:04