簡體   English   中英

將StringIO發送到Twisted FileSender

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM