[英]Sending a StringIO to a Twisted FileSender
我正在嘗試將一些圖像數據發送到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)
嘗試發送時,您的StringIO
位於EOF。 令人驚訝的是它甚至發送了幾個字節(我懷疑它沒有,你只是看到HTTP框架)。 在調用beginFileTransfer
之前嘗試尋找開頭。
此外,您不需要在此處使用FileSender
。 您的數據已完全在內存中。 FileSender
實際上可能會增加發送它的成本。 相反,您可能會認為更簡單:
request.write(buffer.getvalue())
request.finish()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.