我可以使用Python将内存中的对象上传到FTP吗?
这就是我现在正在做的事情:
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')
将文件写入磁盘然后立即删除它们似乎是系统上应该避免的额外工作。我可以使用Python将内存中的对象上传到FTP吗?
Here's what I'm doing now:
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')
Writing files to disk and then imediately deleting them seems like extra work on the system that should be avoided. Can I upload an object in memory to FTP using Python?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
由于 duck-typing,代码中的文件对象 (
f
) 只需支持.read(blocksize)
调用即可与storbinary
配合使用。当遇到这样的问题时,我会转到源代码,在本例中为 lib/python2.6/ftplib.py:正如所评论的,它只需要一个 类文件对象,实际上它甚至不是特别像文件,它只需要
read(n)
。 StringIO 提供了这样的“内存文件”服务。Because of duck-typing, the file object (
f
in your code) only needs to support the.read(blocksize)
call to work withstorbinary
. When faced with questions like this, I go to the source, in this case lib/python2.6/ftplib.py:As commented, it only wants a file-like object, indeed it not even be particularly file-like, it just needs
read(n)
. StringIO provides such "memory file" services.您可以使用任何内存中类似文件的对象,就像
BytesIO
:它有效两者均采用二进制模式
FTP.storbinary
:以及使用
FTP.storlines
:有关更高级的示例,请参阅:
You can use any in-memory file-like object, like
BytesIO
:It works both in binary mode with
FTP.storbinary
:as well as in ascii/text mode with
FTP.storlines
:For more advanced examples, see: