如何在Python中对缓冲读取进行base64编码?

时间:2016-06-28 20:24:10

标签: python python-2.7

我正在将一个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())

但我无法对发电机进行编码。

2 个答案:

答案 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)

最后一部分应该是唯一一个不是三个字节的倍数的部分,因此它应该是唯一一个获得填充的部分(如预期的那样)。