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

如何使用pysftp将变量中的大型XML字符串写入FTP服务器?

解决pysftp.putfo上传XML字符串时的TypeError问题

嘿,我来帮你搞定这个问题!你遇到的TypeError: Expected unicode or bytes, got ...错误,核心原因是**pysftp.putfo 需要的是二进制类文件对象,但你用的StringIO是文本模式的对象,两者不兼容**。

修复后的可运行代码

from io import BytesIO
from pysftp import Connection, CnOpts

cnopts = CnOpts()
cnopts.hostkeys = None  # 注意:这只是测试用的不安全设置,生产环境别这么干!

with Connection('localhost', username='admin', password='test', cnopts=cnopts) as sftp:
    # 把你的XML字符串转成bytes,再用BytesIO包装成二进制类文件对象
    xml_str = "你的大型XML内容字符串"
    # 别忘了指定远程文件路径,不然会传到SFTP服务器的默认目录下
    sftp.putfo(BytesIO(xml_str.encode('utf-8')), remotepath="/path/to/your/file.xml")

为什么原来的代码会报错?

  • StringIO 是用来处理Unicode文本的类文件对象,它的读写操作都是基于文本的;
  • SFTP协议底层是二进制传输,pysftp.putfo 要求传入的对象支持二进制读写(也就是实现了read()方法返回bytes的对象);
  • 当你传入StringIO时,pysftp内部读取数据时拿到的是文本而非bytes,自然就触发了类型错误。

生产环境的安全提醒

千万别像示例里那样把hostkeys设为None,这会跳过SFTP的主机密钥验证,容易遭遇中间人攻击。正确的做法是提前加载合法的主机密钥:

cnopts = CnOpts()
cnopts.hostkeys.load('/path/to/known_hosts')

内容的提问来源于stack exchange,提问作者Stian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:19:57