我正在尝试将一些图像数据发送到Twisted中的FileSender。如果我使用临时文件保存图像,一切正常;
#works
img = Image(format='png', blob=base64.decodestring(dt))
img.save(filename='/tmp/tmp.png')
file = open('/tmp/tmp.png','rb')
filesender = FileSender().beginFileTransfer(file, request)
def fileFinished(ignored):
request.finish()
filesender.addCallback(fileFinished)
但是,我想要做的是在内存而不是文件中执行此操作。我曾尝试使用StringIO来做到这一点,但FileSender似乎只在放弃之前发送了几个字节。我做错了什么?
img = Image(format='png', blob=base64.decodestring(dt))
buffer = StringIO()
img.save(buffer)
filesender = FileSender().beginFileTransfer(buffer, request)
def fileFinished(ignored):
request.finish()
filesender.addCallback(fileFinished)
答案 0 :(得分:3)
当您尝试发送时,StringIO
位于EOF。令人惊讶的是它甚至发送了几个字节(我怀疑它没有,你只是看到HTTP框架)。在致电beginFileTransfer
之前尝试寻找开头。
此外,您并不需要在此处使用FileSender
。您的数据已完全在内存中。 FileSender
实际上可能会增加发送费用。相反,您可能会考虑更简单:
request.write(buffer.getvalue())
request.finish()