Можно ли загрузить объект в память на FTP с помощью Python?

Вот что я делаю сейчас:

mysock = urllib.urlopen('http://localhost/image.jpg') fileToSave = mysock.read() oFile = open(r"C:\image.jpg",'wb') oFile.write(fileToSave) oFile.close f=file('image.jpg','rb') ftp.storbinary('STOR '+os.path.basename('image.jpg'),f) os.remove('image.jpg') 

Запись файлов на диск и последующее удаление их, похоже, являются дополнительной работой в системе, которой следует избегать. Можно ли загрузить объект в память на FTP с помощью Python?

Из-за утиного ввода файловый объект ( f в вашем коде) должен поддерживать только .read(blocksize) для работы с storbinary . Когда вы сталкиваетесь с такими вопросами, я перехожу к источнику, в этом случае lib / python2.6 / ftplib.py:

 def storbinary(self, cmd, fp, blocksize=8192, callback=None): """Store a file in binary mode. A new port is created for you. Args: cmd: A STOR command. fp: A file-like object with a read(num_bytes) method. blocksize: The maximum data size to read from fp and send over the connection at once. [default: 8192] callback: An optional single parameter callable that is called on on each block of data after it is sent. [default: None] Returns: The response code. """ self.voidcmd('TYPE I') conn = self.transfercmd(cmd) while 1: buf = fp.read(blocksize) if not buf: break conn.sendall(buf) if callback: callback(buf) conn.close() return self.voidresp() 

Как прокомментировано, он хочет только файл-подобный объект , даже если он даже не является особенно похожим на файл, ему просто нужно read(n) . StringIO предоставляет такие «файлы памяти».

 import urllib import ftplib ftp = ftplib.FTP(...) f = urllib.urlopen('http://localhost/image.jpg') ftp.storbinary('STOR image.jpg', f)