小编jos*_*ose的帖子

ftp发送python bytesio流

我想从一个ftp站点向另一个ftp站点发送带有python ftplib的文件,以避免文件读/写过程.

我创建了一个BytesIO流:

myfile=BytesIO()
Run Code Online (Sandbox Code Playgroud)

我使用retrbinary成功从ftp站点检索图像文件:

ftp_one.retrbinary('RETR P1090080.JPG', myfile.write)
Run Code Online (Sandbox Code Playgroud)

我可以将此内存对象保存为常规文件:

fot=open('casab.jpg', 'wb')

fot=myfile.readvalue()
Run Code Online (Sandbox Code Playgroud)

但我无法通过ftp与storbinary发送此流.我认为这会奏效:

ftp_two.storbinary('STOR magnafoto.jpg', myfile.getvalue())
Run Code Online (Sandbox Code Playgroud)

但不是.我得到一个很长的错误消息msg结尾'buf = fp.read(blocksize)AttributeError:'str'对象没有属性'read'

我也试过很多荒谬的组合,但没有成功.顺便说一句,我对myfoto.write真正做的事情也很困惑.不应该是myfoto.write()吗?

我对这个缓冲器的功能或要求也很无能为力.我想要的实现太复杂了吗?我应该在系统中使用中间写/读来ping文件吗?所有

编辑:感谢abanert,我把事情做好了.对于记录,storbinary参数是错误的,并且在发送之前需要myfile.seek(0)来"回放"流.这是一个工作片段,可以在两个ftp地址之间移动文件而无需中间物理文件写入:

import ftplib as ftp
from io import BytesIO

ftp_one=ftp.FTP(address1, user1, pass1)
ftp_two=ftp.FTP(address2, user2, pass2)
myfile=BytesIO()
ftp_one.retrbinary ('RETR imageoldname.jpg', myfile.write)
myfile.seek(0)
ftp_two.storbinary('STOR imagenewname.jpg', myfile)
ftp_one.close()
ftp_two.close()
myfile.close()
Run Code Online (Sandbox Code Playgroud)

python memory file ftplib bytesio

7
推荐指数
1
解决办法
4195
查看次数

标签 统计

bytesio ×1

file ×1

ftplib ×1

memory ×1

python ×1