我正在将一个png流式传输到浏览器,以便在img src属性中使用。
def streamer():
with open(local_path) as fh:
while True:
rbuf = fh.read(READ_BUF_SIZE)
if not rbuf:
break
yield rbuf
我想做这样的事情:
base64.b64encode(streamer())
但我无法对发电机进行编码。
答案 0 :(得分:0)
for part in streamer():
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
print base64.b64encode(part)
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
答案 1 :(得分:0)
base64.b64encode
需要字节或字符串(取决于Python版本)。
如果您不介意将整个文件读入内存,请首先创建完整的字符串,然后对其进行编码:
base64.b64encode(''.join(streamer()))
如果您想要编码,请注意以三个字节的倍数进行编码。 (三个字节在base64中变为四个字符,因此您不会出现填充问题。)
例如,使用三个的倍数作为READ_BUF_SIZE
,这应该有效:
for part in streamer():
yield base64.b64encode(part)
最后一部分应该是唯一一个不是三个字节的倍数的部分,因此它应该是唯一一个获得填充的部分(如预期的那样)。